home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-22 | 102.6 KB | 2,743 lines |
-
-
-
- Handbuch
-
- Weller-TOOLS für GFA-BASIC V3.0/V2.0
-
- V3.02 01/1990
-
- Weller-TOOLS
- Dipl.-Ing. Clemens Weller
- Adalbert-Stifter-Straße 27
- 7141 Steinheim a.d. Murr
- Telefon (07144) 20 80 27
- BTX 07144208027
-
-
-
-
- Die Weller-TOOLS für GFA-BASIC stellen eine Entwicklungsum-
- gebung für GFA-BASIC-Programme dar. Damit soll den vielen Hobby-
- und Profi-Programmierern ein Werkzeug in die Hand gelegt werden,
- das sie bei der Arbeit unterstützt, vor allem bei der Optimierung
- und Fehlersuche.
-
- Letztendlich profitieren alle Atari-Anwender von besseren
- Programmen - mit mehr Erfolg und Freude bei der Arbeit mit dem
- Atari ST.
-
-
-
-
- əINHALTSVERZEICHNIS
-
-
- 1. EINLEITUNG...................................................5
-
- 1.1 GESCHICHTEN DES ALLTAGS.....................................5
-
- 1.2 COMPUTER-UNTERSTÜTZTES PROGRAMMIEREN........................7
-
- 1.3 WERKZEUGE FÜR GFA-BASIC.....................................8
- 1.3.1 Programm-Schalen,.........................................8
- 1.3.2 Wechselbeziehungs-Analysatoren:...........................8
- 1.3.3 Outliner..................................................8
- 1.3.4 Editoren..................................................8
- 1.3.5 Konverter.................................................9
- 1.3.6 Andere....................................................9
-
- 1.4 DIE WELLER-TOOLS FÜR GFA-BASIC ALS ENTWICKLUNGSUMGEBUNG....10
- 1.4.1 Leistungsumfang..........................................10
- 1.4.2 Cross-Reference-Analyser.................................10
- 1.4.3 Flexible Programmschale..................................11
- 1.4.4 Outliner.................................................11
- 1.4.5 Universelles Ausgabekonzept..............................11
- 1.4.6 Leicht zu bedienen.......................................11
- 1.4.7 Allgemeine Merkmale......................................11
- 1.4.8 Public-Domain- und Profi-Version.........................12
- 1.4.9 Pressespiegel............................................12
-
- 1.5 TIPS ZUM PROGRAMMIEREN.....................................13
-
-
- 2. EINFÜHRUNG..................................................14
-
- 2.1 INSTALLATION...............................................14
-
- 2.2 DER BILDSCHIRMAUFBAU.......................................15
-
-
- 3. REFERENZ-TEIL: BESCHREIBUNG DER FUNKTIONEN..................16
-
- 3.1 WT_GFA.....................................................16
-
- 3.2 DATEI......................................................17
- 3.2.1 LST-Datei laden..........................................17
- 3.2.2 Ausgabegeräte............................................18
- 3.2.3 Bildschirmparameter......................................18
- 3.2.4 Druckerparameter.........................................19
- 3.2.5 Druckertest..............................................19
- 3.2.6 Ende.....................................................19
-
- 3.3 SHELL......................................................20
- 3.3.1 Zweck Programmschale.....................................20
- 3.3.2 Konfiguration der festen GFA-Programmschale..............20
- 3.3.3 Die flexible Programmschale..............................22
- 3.2.4 Desktop-Funktionen.......................................23
- 3.3.5 Aspekte des Speicherplatzes..............................23
-
- 3.4 X-REF......................................................24
- 3.4.1 Zweck von Cross-Reference-Listen.........................24
- 3.4.2 X-REF erzeugen...........................................25
- 3.4.3 X-REF ausgeben...........................................26
- 3.4.4 Beispiel: Cross-Reference-Liste..........................27
- 3.4.5 Unzulänglichkeiten.......................................32
- 3.4.6 Speicherbedarf der X-REF-Funktion........................32
-
- 3.5 OUTLINE....................................................33
- 3.5.1 Funktionsweise...........................................33
- 3.5.2 Start....................................................36
- 3.5.3 Schlüsselwörter hinzufügen...............................36
- 3.5.4 Schlüsselwörter entfernen................................36
- 3.5.5 Schlüsselwörter laden....................................36
- 3.5.6 Schlüsselwörter speichern................................36
- 3.5.7 Kommentare berücksichtigen...............................36
- 3.5.8 Zeichenketten berücksichtigen............................36
- 3.5.9 Proceduren klappen.......................................37
- 3.5.10 Proceduren auflisten....................................38
- 3.5.11 Module auflisten........................................38
- 3.5.12 1-zeilige Funktionen auflisten..........................38
- 3.5.13 Mehrzeilige Funktionen auflisten........................38
- 3.5.14 Lokale Variablen auflisten..............................38
-
- 3.6 DIVERSES...................................................39
- 3.6.1 Listing-Druck-Funktion...................................39
- 3.6.2 Listing numerieren.......................................40
- 3.6.3 Zeilenoffset.............................................40
- 3.6.4 Kommentare löschen.......................................40
- 3.6.5 Statistik................................................41
- 3.6.6 Datamake.................................................42
- 3.6.7 Speicher freigeben.......................................43
-
- 3.7 HILFE......................................................44
- 3.7.1 Extrahilfe...............................................44
- 3.7.2 Inhaltsverzeichnis.......................................44
- 3.7.3 Kapitel zeigen...........................................44
-
-
- 4. DAS VERTRIEBSKONZEPT DER WELLER-TOOLS FÜR GFA-BASIC.........45
-
-
- 5. ANHANG......................................................46
-
- 5.1 LIEFERUMFANG...............................................46
-
- 5.2 DATEIFORMATE...............................................48
- 5.2.1 WT_GFA.INF...............................................48
- 5.2.2 WT_GFA.PIC...............................................48
- 5.2.3 WT_GFA.HLP...............................................48
- 5.2.4 WT_GFA.FSL...............................................49
-
- 5.3 Druckertreiber patchen.....................................50
-
- 5.4 ÄNDERUNGEN BEI UPDATES.....................................51
- 5.4.1 Änderungen V1.2 -> V1.42.................................51
- 5.4.2 Änderungen V1.42-> V3.00.................................51
- 5.4.3 (Noch) nicht umgesetzte Erweiterungsvorschläge...........52
- 5.4.4 Fehler, die noch nicht behoben sind......................53
-
- 5.5 SCHMANKERL: PROGRAMMIERWETTBEWERB..........................54
-
- 5.6 UNIX-WERKZEUGE FÜR DIE PROGRAMMENTWICKLUNG.................55
- 5.6.1 Programm-Checker 'lint'..................................55
- 5.6.2 C-Präprozessor 'pp'......................................55
-
- 5.7 GLOBALES PROGRAMM-LAYOUT...................................56
-
- 5.8 ÜBERSICHT ÜBER ZUSATZPROGRAMME FÜR GFA-BASIC...............57
- 5.8.1 Analysierer..............................................57
- 5.8.2 Masken- und Menü-Generatoren.............................58
- 5.8.3 Shells...................................................59
- 5.8.4 Konverter................................................59
- 5.8.5 Diverses.................................................60
-
- 5.9 DIES UND DAS...............................................61
- 5.9.1 Dank an..................................................61
- 5.9.2 Ideen aus anderen Programmen.............................61
- 5.9.3 Programmhinweise.........................................61
- 5.9.4 Copyright, Public Domain.................................61
-
- 5.10 ANWENDER-REPORT...........................................62
-
-
-
-
- ə1. EINLEITUNG
-
-
-
- ə1.1 GESCHICHTEN DES ALLTAGS
-
- H.A. ist professioneller Programmierer. Neben vielen anderen
- Sprachen verwendet er auch GFA-BASIC. Ab und zu schreibt er auch
- Public-Domain-Programme, die ihm zwar kein Geld, aber einen
- ziemlich großen Bekanntheitsgrad verschaffen. Kurz nachdem
- eines seiner Programme (von Sagrotan V4.01 ist hier die Rede) auf
- dem Public-Domain-Markt erschien, lief schon das Telefon an: 'Das
- Programm stürzt ab', stellte ein Anwender fest. In letzter Minute
- hatte nämlich H.A. noch kleine Änderungen am Programm vorgenom-
- men, und dabei einen klitzekleinen Tippfehler an einer empfind-
- lichen Stelle ('Kanal öffnen') begangen. Mit der Cross-Reference-
- Liste oder der Outline-Funktion der Weller-TOOLS für GFA-BASIC
- hätte er auch noch in allerletzter Minute diesen Tippfehler
- gefunden.
-
- C.W. schrieb ein inzwischen recht bekanntes Programm (es
- heißt 1st XTRA und liegt jedem 1st Word Plus V3.15 bei), das
- länger und länger wurde. Bei Durchbrechen der 200 kB-Marke der
- Länge des Programm-Quellcodes mußte die Variablenorganisation
- umgestellt werden. Zu viele globale Variablen (etwa 500) hatten
- sich angesammelt und sollten nun, wo möglich und sinnvoll, als
- lokale Variablen oder als Übergabeparameter definiert werden. Die
- Cross-Reference der Weller-TOOLS für GFA-BASIC erleichterten die
- Arbeit enorm. Seither ist der Speicher aufgeräumt. Nur noch etwa
- 30 globale Variablen werden für wichtige Informationen, die
- ständig benötigt werden, verbraucht.
-
- P.S. schrieb eine bekannte Public-Domain-Programmschale.
- Leider verbrauchte dieses viel zuviel Speicher, was bei der
- Arbeit damit ein großes Handicap darstellt. C.W. bestellte sich
- bei P.S. den Programmcode. Nach drei Stunden Arbeit mit den
- Weller-TOOLS für GFA-BASIC blieben nur noch halb so viele Variab-
- len übrig (viele wurden nur einmal definiert, aber nie verwen-
- det!), und der Speicherbedarf sank auf ein Drittel.
-
- H.A. und C.W. schrieben seinerzeit zusammen an einem etwa
- 25 kB großen Programm. Jeder hatte seine Aufgaben. Einmal
- wöchentlich wurden die neuen oder geänderten Proceduren
- (eigentlich: Unterprogramme) zusammengetragen. Dabei mußten die
- Variablennamen übereinstimmen, und auch die Proceduren, die
- Übergabeparameter erwarten, mußten richtig aufgerufen werden.
- Ohne den Weller-TOOLS für GFA-BASIC wäre wahrscheinlich das Pro-
- gramm nie richtig gelaufen.
-
-
-
- ə1.2 COMPUTER-UNTERSTÜTZTES PROGRAMMIEREN
-
-
- Wahrscheinlich haben Sie auch Ihre eigenen 'Geschichten des
- Alltags'. Lassen Sie einmal Ihre Tätigkeiten als Programmierer
- Revue passieren. Sie werden feststellen, daß leider ein Großteil
- der Zeit und Energie dafür verbraucht wird, Fehler zu finden.
-
- Rechnergestützte Werkzeuge und Methoden bei der Entwicklung
- von Software verkürzen die Zeit von der Idee bis zur Fertigstel-
- lung eines Programmes. Sie verwalten Ideen und Skizzen der
- Software-Designer, prüfen die Plausibilität von Algorithmen und
- generieren sogar den Programmcode auf Hochsprachen-Ebene. Sie
- nehmen dem Entwickler Routinearbeiten ab und schaffen ihm freien
- Raum für Kreativität. Sie planen und koordinieren den Einsatz
- aller an einem Software-Projekt beteiligten Personen. Solche
- Systeme für 'Computer Aided Software Engeneering' - kurz CASE-
- Systeme - sind bislang Unix-Systemen und Großrechnern vorbehal-
- ten. Einen kurzen Einblick in die wichtigsten Merkmale von CASE-
- Systemen gibt der Beitrag:
-
- 'Der Werkzeugkasten füllt sich
- CASE begleitet die Software durch den gesamten Lebenszyklus'
-
- in: c't-Special 4, iX-Multiuser-Multitasking-Magazin, 11/1988, S.
- 98-102.
-
- Für den PC-Bereich geben diese Systeme wenig Sinn. Zum einen
- würden Speicherplatz und Rechenleistung nicht ausreichen, aus-
- schlaggebend ist aber die Single-User-Konzeption von 'Personal'-
- Computern.
-
- Trotzdem gibt es Unterstützung für PC-Programmierer in Form
- von zahlreichen Tools und Utilities, die meistens eine ganz
- spezielle Funktion anbieten. Eine Übersicht bietet der 600 Seiten
- umfassende 'Utility-Führer' vom Rossipaul-Verlag.
-
-
-
- ə1.3 WERKZEUGE FÜR GFA-BASIC
-
- Das GFA-Entwicklungssystem wird von Haus aus recht spärlich
- mit Entwicklungswerkzeugen ausgestattet. Lediglich die Pro-
- grammschale Menux liegt bei. Einen symbolischen Debugger vermißt
- man ebensp wie weitere elementare Hilfsmittel wie Pretty-Lister
- und Cross-Reference-Analyser.
-
- Immerhin ist das GFA-Entwicklungssystem recht preisgünstig,
- so daß man keine allzu großen Erwartungen anstellen darf. Zudem
- erspart der schnelle Interpreter viel Entwicklungszeit und hat in
- geringen Umfang Hilfsmittel zur Programmentwicklung integriert
- (Trace, Dump, .l-Befehle). Die Ausführungen im Compiler-Handbuch
- zum erzeugten Assemble-Code können in gewisser Weise manchmal
- einen symbolischen Debugger ersetzen.
-
- Für die große Schar der GFA-BASIC-Programmierer gibt es -
- vor allem auf dem Public-Domain-Markt - einige zusätzliche
- Hilfsmittel, die die Programmierung unterstützen. Diese Tools
- erfüllen jeweils einen ganz bestimmten Zweck, und so kann man sie
- in folgende Gruppen aufteilen:
-
-
- ə1.3.1 Programm-Schalen, Shells:
-
- Sie integrieren Interpreter, Compiler und andere Programme
- in eine komfortablere Benutzeroberfläche als die des Desk-
- tops. 'Turn-arounds', also der Wechsel zwischen Interpreter,
- Compiler und generiertem Programm, werden vereinfacht.
-
-
- ə1.3.2 Wechselbeziehungs-Analysatoren: Cross-Reference-Analyser:
-
- Die geordnete Auflistung von Variablen, Proceduren, Funktio-
- nen und Labels erleichtert die Fehlersuche enorm. Vor allem
- bei sehr großen Programmen wird es sehr schwierig, Flüchtig-
- keitsfehler zu finden.
-
-
- ə1.3.3 Outliner:
-
- Sie zeigen nur einen Teil des Programmes, z.B. nur Proce-
- dure-Definitionen wie im GFA-BASIC V3-Interpreter.
-
-
- ə1.3.4 Editoren:
-
- Editoren für Dialogboxen, Bildschirm-Masken und Pull-Down-
- Menüs. Besonders in der 'Design-Phase' der Programmierung
- helfen diese Programme. Mit ihnen kann man Benutzeroberflä-
- chen entwickeln und testen, und den entsprechenden Programm-
- code generieren lassen, um ihn in eigene Programme einzubin-
- den.
-
- Text-Editoren sind nützlich, wenn man größere Änderungen
- vornehmen möchte, z.B. aus mehreren Listings einige Teile
- ausschneiden und zusammenfügen.
-
-
- ə1.3.5 Konverter:
-
- Konverter von GW- oder ST-BASIC nach GFA-BASIC oder umge-
- kehrt. Es gibt auch einen Konverter von GFa-BASIC V2 nach
- Omikron-BASIC.
-
-
- ə1.3.6 Andere Hilfsprogramme:
-
- Source-Code-Lister. Struktogramm-Konverter erzeugen aus
- einem fertigen Quellcode ein Struktogramm.
-
- Beispiele dieser Hilfsprogramme mit Bezugsadressen sind in Kapi-
- tel 5.8 aufgeführt.
-
-
-
- ə1.4 DIE WELLER-TOOLS FÜR GFA-BASIC ALS ENTWICKLUNGSUMGEBUNG
-
-
- ə1.4.1 Leistungsumfang
-
- Die Weller-TOOLS für GFA-BASIC stellen eine Entwicklungsum-
- gebung dar, das die wichtigsten Werkzeuge integriert:
-
-
- Die besonderen Merkmale:
-
-
- ə1.4.2 Cross-Reference-Analyser
-
- - Ausgabe als Zeilenreferenz oder Proceduren-Referenz, z.B:
-
- adr0% f_load 271 273 277 295
- f_check 731 732 737 745 747
- f_clear 1211 1212 1219
-
- - Findet automatisch viele Tipp- und Flüchtigkeitsfehler, z.B:
-
- adro% fload 275
- *** Fehler: adro% kommt nur einmal vor, Tippfehler?
-
- - Unterscheidet zwischen lokalen und globalen Variablen und
- Übergabeparametern.
-
- - Macht Verbesserungsvorschläge, wenn globale Variablen lokal
- definiert werden könnten, z.B:
-
- adr_nn% f_check 735 736 741
- *** Warnung: adr_nn% kommt nur in 1 Procedure vor, evt.
- lokal definieren!
-
-
- ə1.4.3 Flexible Programmschale
-
- - Das Wechseln zwischen Interpreter, Compiler, Editor,
- Resource Construction Set usw. wird mit der eingebauten
- Shell zum Kinderspiel, besonders bei Verwendung einer Fest-
- platte oder Ramdisk.
-
- - Zweite Menüleiste, kann über ASCII-Datei vollkommen frei
- konfiguriert werden.
-
- - Texteditor (z.B Tempus) wird über Kommando-Strings gesteuert
- und lädt automatisch die LST- und Analysedateien.
-
- - Die wichtigsten Desktop-Funktionen sind integriert: Dateien
- löschen, umbenennen, kopieren; Ordner erzeugen; freier
- Speicher auf Diskette.
-
-
- ə1.4.4 Outliner
-
- - Unterstützt Analyse von Programmstrukturen und das Auffinden
- von logischen Fehlern.
-
- - Erweiterte 'Klapp-Funktionen' für Proceduren, Funktionen und
- Module: Proceduren werden dargestellt. daß mit einem Blick
- erkennbar ist, welche von welcher anderen Procedure aufgeru-
- fen wird ('Who is Who in GFA-BASIC').
-
- - Bibliothek für Schlüsselbegriffe.
-
-
- ə1.4.5 Universelles Ausgabekonzept
-
- - Alle Ausgaben wahlweise auf Bildschirm, Drucker oder Datei.
-
- - Unterstützt hohe und mittlere Bildschirmauflösung. Läuft
- auch auf Großbildschirm.
-
- - Schriftgrößen und Seitenparameter einstellbar.
-
-
- ə1.4.6 Leicht zu bedienen
-
- - Extrahilfe-Modus für alle Menüpunkte.
-
- - Umfangreiche Hilfstexte (ca 107 kB) über Inhaltsverzeichnis
- aufrufbar.
-
-
- ə1.4.7 Allgemeine Merkmale
-
- - Sehr schnell durch Programmierung der Kernfunktionen in
- Assemble-Code.
-
- - Unterstützung von Programm-Modulen über Kommentarzeilen.
-
- - Weitere Hilfsfunktionen:
-
- Listing-Printer: Listings werden übersichtlich ausgedruckt,
- und zwar so, daß Programm-Module getrennt werden, wichtige
- Zeilen in Fettschrift hervorgehoben werden, und daß bei
- Bedarf auch Seitenumbrüche von Hand in das Programm einge-
- fügt werden können.
-
- Utilities wie: REM-Killer, DATA-Make, Zeilen numerieren,
- Statistik-Funktionen.
-
- - Bis auf die Erzeugung einer Cross-Reference sind alle
- Funktionen auch für andere Sprachen, insbesondere Omikron-
- BASIC, verwendbar.
-
-
- ə1.4.8 Public-Domain- und Profi-Version
-
- Die Weller-TOOLS für GFA-BASIC sind in zwei Version erhält-
- lich, die sich lediglich in der Größe des zu analysierenden
- Programmes unterscheiden. Die Public Domain-Version analysiert
- Programme bis 100 kB, was für die meisten Anwendungen ausreicht.
- Das über 60 Seiten umfassende Handbuch ist mit allen Bildern als
- 1st Word Plus-Dokument und als ASCII-Datei auf der Diskette
- enthalten. Siehe auch Kapitel 4.
-
-
- ə1.4.9 Pressespiegel
-
- Die seit Ende 1988 auf dem Public-Domain-Markt erhältliche
- Version 1.2 und die Profi-Versionen 1.42 und 3.0 wurden in
- verschiedenen Magazinen vorgestellt:
-
- Magazin Ausgabe Seite Beitrag
-
- Public Domain 3/89 56-57 Testbericht
- CHIP 4/88 296 Testbericht
- PD-News 3 25-28 Produktinfo
- GFA-Club-Nachrichten 3/4 89 16-17 Produktinfo
- Atari-Magazin 5/89 14-15 Produktinfo
- ST-Vision 2/89 42 Produktinfo
- Happy Computer 6/89 40-41 Produktinfo
- GFA-Club-Nachrichten 6/89 17 Produktinfo
-
-
-
- ə1.5 TIPS ZUM PROGRAMMIEREN
-
- Jeder Programmierer hat seinen eigenen Stil, Programme zu
- schreiben. Wer einen kleinen Einblick in diese Technik gewinnen
- möchte, sollte unbedingt die lehrreichen und zugleich unterhalt-
- samen Interviews mit einigen der bedeutendsten Programmierern in
- Susan Lammers Buch
-
- 'Faszination Programmieren'
-
- vom Markt&Technik-Verlag lesen. Jedes Kapitel dieses Buches birgt
- mehr Informationen als die Massen an 'Großen Büchern' verschiede-
- ner Verlage.
-
- Ausnahmen bestätigen die Regel, und so kann man dem ambitio-
- nierten GFA-BASIC-Programmierer Michael Koflers Buch
-
- 'Referenz-Handbuch GFA-BASIC 3.0'
-
- vom Sybex-Verlag empfehlen. Auf etwa 800 Seiten findet man viele
- wichtige Detailinformationen, die beim Lösen von Programmierauf-
- gaben oder Auffinden von Fehlern entscheidend sein können.
-
- Wenn man gar nicht mehr weiter weiß, kann man auch bei Frank
- Ostrowsky und seinen Kolleginnen und Kollegen direkt anrufen.
- Erfahrungsgemäß kommt man meistens aufs erste Mal durch und hat
- freundliche und kompetente Gesprächspartner.
-
- Tools sind Werkzeuge. Sie ersetzen nicht den Geist, können
- ihn aber wohl beflügeln. Wenn Sie sich bisher nicht besonders
- viele Gedanken über Variablen, Strukturen und Optimierung gemacht
- haben, haben Sie vielleicht jetzt den Anstoß dazu gefunden. Mit
- den Weller-TOOLS für GFA-BASIC haben Sie jedenfalls ein mächtiges
- Werkzeug hierfür in der Hand.
-
-
-
-
- ə2. EINFÜHRUNG
-
-
-
- ə2.1 INSTALLATION
-
-
- Das Programm kann in ein beliebiges
- Verzeichnis kopiert werden. Am besten
- dorthin, wo auch GFA-BASIC ist. Zur
- Installation genügt es notfalls, daß nur
- die PRG-Datei kopiert wird.
-
- Es können noch weitere Dateien mitko-
- piert werden. Diese werden dann automa-
- tisch beim Programmstart geladen:
-
-
-
-
-
- WT_GFA.INF: Pfade für MENUX, Interpreter, Compiler und Editor
- WT_GFA.FSL: Pfade der flexiblen Programmschale
- WT_GFA.HLP: Datei mit Hilfstexten
- WT_GFA.PIC: Datei mit Hilfsbildschirm
-
- Diese Dateien werden im Kapitel 5.2 näher beschrieben.
-
- Im Programm ist ein Druckertreiber integriert, der mit
- Epson- und IBM-Druckern sowie allen kompatiblen (NEC, Star, ...)
- funktioniert. Für exotische Drucker können alle Steuerzeichen
- über Patches umdefiniert werden. Siehe Kapitel 5.3. Eine weitere
- Möglichkeit, den Drucker anzupassen, besteht in der Verwendung
- der bei GFA-BASIC mitgelieferten Druckertreibern.
-
- Es kann noch zusätzlich ein Ordner "KEY" angelegt werden, in
- den alle *.KEY-Dateien kopiert werden. Der Outliner ist dann
- standardmäßig auf diesen Ordner eingestellt.
-
- Wenn die Dateien nicht auf
- Festplatte kopieren, sollten Sie
- nicht mit der Originaldiskette, son-
- dern mit einer Kopie arbeiten. Für
- eine bessere Optik können Sie sich
- ein Disketten-Etikett auf einfache
- Weise selbst erstellen. Auf der Dis-
- kette befinden sich drei sog.
- 'Printme'-Dateien, die vom Desktop
- aus per Doppelklick ausgedruckt wer-
- den können. Die Dateien enthalten
- alle Steuerzeichen für 9-Nadler in
- einfacher Dichte und vierfacher
- Dichte, sowie 24-Nadler in dreifa-
- cher Dichte.
-
-
-
- ə2.2 DER BILDSCHIRMAUFBAU
-
- Der Bildschirmaufbau (im Bild etwas umgestellt) ist sehr
- einfach: Es wird neben der Menüleiste nur 1 Fenster verwendet.
- Das sieht zwar nicht besonders originell aus, reicht aber für den
- beabsichtigten Zweck vollkommen aus. Der Bildschirm wird nach dem
- Schließen von Accessories wieder restauriert. Accessories, die
- nicht nur aus einer Dialogbox bestehen, sondern ein eigenes
- Fenster öffnen, sollten nicht verschoben werden.
-
- Der Aufbau der Menüleiste wird im nächsten Kapitel ausführ-
- lich mit den Funktionen erläutert.
-
- In der Titelzeile des Fensters steht, was gerade gemacht
- wird. Ebenso erscheinen hier Meldungen, z.B. wenn eine
- Dateiauswahl-Box aufgerufen wird, oder mit welcher Taste ein
- Prozeß angehalten, abgebrochen oder fortgeführt werden kann.
-
- In der Infozeile stehen einige aktuelle Parametereinstellungen.
-
- Links stehen die Ausgabegeräte: 'S' für Bildschirm (Screen),
- 'P' für Drucker (Printer) und 'F' für Datei (File). Wenn ein
- angeschlossener Drucker empfangsbereit ist, erscheint neben dem
- 'P' ein Häkchen, daneben die Druckerparameter. Die aktivierte
- Scrollfunktion wird mit einem Klingelsymbol angezeigt.
-
- Falls eine Datei geladen ist, werden Dateiname, Dateilänge
- und Anzahl der Zeilen in der Mitte der Infozeile angezeigt.
-
- Rechts wird der freie Speicherplatz angezeigt. Dies ist
- der Wert, den FRE(0) zurück gibt. Wenn eine Cross-Reference
- erzeugt wird, wird dieser Wert stetig kleiner, da die internen
- Felder gefüllt werden. Bevor in ein anderes Programm verzweigt
- wird, wird dieser Speicherplatz an GEM zurückgegeben, damit sich
- das aufgerufene Programm frei bedienen kann.
-
- Fast aller Text, der auf dem Bildschirm erscheint, kann auch
- auf eine Datei oder den Drucker umgeleitet werden.
-
-
-
-
- ə3. REFERENZ-TEIL: BESCHREIBUNG DER FUNKTIONEN
-
-
-
- ə3.1 WT_GFA
-
- 'Info' gibt folgende Informationen aus: Falls sich in dem
- Pfad, von dem die Weller-TOOLS für GFA-BASIC gestartet wurden,
- eine Datei namens 'WT_GFA.PIC' befand, wurde diese geladen und
- wird nun angezeigt. Mit einem Mausklick oder einer beliebigen
- Taste geht es weiter. In einer Alert-Box werden dann Versionsnum-
- mer, Datum und weitere Hinweise angezeigt.
-
- Unter 'WT_GFA' können Accessories aufgerufen werden. Der
- Bildschirm wird nach dem Schließen von Accessories wieder restau-
- riert. Falls ein Accessory nicht eine Dialogbox öffnet, sondern
- ein eigenes Fenster, sollte dieses nicht verschoben werden oder
- andere Funktionen aufgerufen werden. Hinter der Restaurations-
- funktion verbirgt sich keine vollständige 'Redraw'-Routine, son-
- dern nur ein SGET/SPUT.
-
-
-
- ə3.2 DATEI
-
-
- ə3.2.1 LST-Datei laden
-
- Mit 'LST-Datei laden' wird eine Datei in den Arbeitsspeicher
- geladen. Es erscheint eine Dateiauswahlbox, die bereits den Pfad
- enthält, von dem die letzte Datei geladen wurde.
-
- Es können beliebige Dateien geladen werden, da nicht
- untersucht wird, ob es sich tatsächlich um eine mit DEFLIST 0
- abgespeicherte GFA-BASIC-Datei handelt. Damit ist es also
- möglich, auch Dateien anderer Computersprachen oder sonstige
- Dateien zu laden.
-
- Die maximale Größe einer Datei, die geladen werden kann,
- wird in der Titelzeile des GEM-Fensters angezeigt. Wird diese
- überschritten, erscheint eine entsprechende Meldung. Es ist nicht
- möglich, nur einen Teil einer (eventuell sehr großen) Datei zu
- laden.
-
- Die Datei wird wie bei den meisten Texteditoren, vollständig
- geladen und befindet sich auch vollständig immer im Speicher
- (auch wenn ein externes Programm aufgerufen wird). Dadurch kann
- das Programm sehr schnell die Kernfunktionen ausführen. Die
- meisten der zeitkritischen Funktionen sind in Assembler program-
- miert. Die Erzeugung einer Cross-Reference einer 300 kB großen
- Datei dauert nur wenige Minuten!
-
- Unmittelbar nach dem Ladevorgang werden die Zeilenlänge
- berechnet und die Anzahl der Definitionen (Zeile beginnt mit
- 'P'). Die Bestimmung dieser Werte benötigt auch bei extrem
- großen Dateien nur Bruchteile einer Sekunde.
-
- Die geladene Datei befindet sich so lange im Speicher, bis
- eine neue geladen wird oder der Speicher mit 'Speicher freigeben'
- (s. Kapitel 3.6.7) gelöscht wird.
-
-
- ə3.2.2 Ausgabegeräte
-
- Hiermit wird das Ausgabegerät festgelegt. Ein Häkchen
- markiert, welche Geräte angewählt wurden. 'Datei' und 'Drucker'
- können nicht gleichzeitig aktiviert werden, sie schalten sich
- gegenseitig aus. Die Einstellungen werden auch in der Infozeile
- angezeigt.
-
- Das Prinzip von 'allgemeinen Ausgabegeräten' wurde konse-
- quent im ganzen Programm durchgehalten. Deshalb ist es z.B.
- möglich, bei 'Listing drucken' in eine Datei zu drucken, und
- diese Datei, die dann alle Steuerzeichen enthält, auf einem MS-
- DOS- oder VMS-Computer per 'Copy'-Befehl auf einem dort zur
- Verfügung stehenden Drucker formatiert auszudrucken. Anders herum
- gesagt: Wenn ein Listing sofort auf einem Drucker ausgedruckt
- werden soll, muß der Drucker als Ausgabegerät gewählt sein!
-
-
- ə3.2.3 Bildschirmparameter
-
- Hiermit wird die Größe der Bildschirmzeichen gewählt. Abhän-
- gig davon, in welcher Bildschirmauflösung das Programm gestartet
- wurden, sind hier 13 Punkt (hohe Auflösung) oder 6 Punkt
- (mittlere Auflösung) voreingestellt. Bei kleinen Schriften ist
- die Übersichtlichkeit größer, besonders bei der Outline-Funktion.
- Das Programm läuft auch mit Großbildschirmen und verwendet dabei
- den ganzen Bildschirmbereich.
-
- Wenn 'Scrollen' eingeschaltet ist (Voreinstellung), läuft
- der Bildschirm ohne anzuhalten durch, wenn eine Bildschirmseite
- vollgeschrieben ist. Mit den Tastaturkombinationen <Control> S
- und <Control> Q kann die Bildschirmausgabe pausiert bzw. fortge-
- führt werden.
-
- Bei ausgeschaltetem 'Scrollen' hält die Bildschirmausgabe
- jedesmal an, wenn eine Bildschirmseite vollgeschrieben ist. Mit
- einer beliebige Taste kann die Bildschirmausgabe dann fortgesetzt
- werden. Auch hier kann mit den Tastaturkombinationen <Control> S
- und <Control> Q die Bildschirmausgabe pausiert bzw. fortgeführt
- werden.
-
- Bei gleichzeitiger Ausgabe auf Drucker oder Datei wird die
- Ausgabe immer mit Scrollen durchgeführt.
-
-
- ə3.2.4 Druckerparameter
-
- Hiermit können folgende Druckerparameter eingestellt werden
- (voreingestellte Werte in Klammern): Linker Rand (12), rechter
- Rand (80), Länge des Papiers in Zoll (12), Seitenvorschub nach
- Druckende (ja).
-
- Der Drucker wird bei Beginn des Druckvorganges zurückge-
- setzt, dann auf Schmalschrift (17.2 cpi) und kleineren Zeilenab-
- stand (8 lpi) umgeschaltet, und schließlich die o.g. Parameter
- eingestellt. Nach einem Druckvorgang kann wiederum ein Druckerre-
- set ausgelöst werden. Die Steuerzeichen lassen sich auf exotische
- Drucker anpassen (s. Kap. 5.3).
-
-
- ə3.2.5 Druckertest
-
- Druckertest führt einen einfachen Test aus: Einige Zeichen
- werden ausgegeben, um zu erkennen, ob die Ränder und der
- Zeilenabstand richtig eingestellt sind.
-
- Unabhängig von diesem Druckertest wird jedesmal, bevor eine
- Druckerausgabe beginnt, nachgeprüft, ob der Drucker empfangs-
- bereit ist. Wenn nicht, kann der Prozeß (nach dem Einschalten des
- Druckers) weitergeführt oder abgebrochen werden. Während des
- Druckvorganges sollte der Drucker nicht länger als 30 Sekunden
- ausgeschaltet werden.
-
-
- ə3.2.6 Ende
-
- 'Ende' verläßt das Programm, ohne vorher nachzufragen. Die
- Sicherheitsabfrage wurde absichtlich weggelassen, da alle Ergeb-
- nisse - anders als z.B. bei einem Textverarbeitungsprogramm -
- reproduzierbar sind. Ein 'mechanischer' Schutz ist aber trotzdem
- gegeben, denn man muß mit der Maus einigen Weg zurücklegen, um
- diesen Menüeintrag zu erreichen.
-
-
-
- ə3.3 SHELL
-
-
- ə3.3.1 Zweck der Programmschale
-
- Die Programmschalen unterstützen die interaktive Zusammenar-
- beit mit anderen Programmen, insbesondere den Programmen des GFA-
- BASIC-Entwicklungssystems. Von diesen Schalen aus kann in die
- wichtigsten Programme direkt verzweigt werden. Dies setzt natür-
- lich voraus, daß die Programme auch tatsächlich verfügbar sind:
- Wer nur ein Diskettenlaufwerk hat, muß entweder alle benötigten
- Programme auf eine Diskette kopieren, oder er muß vor Aufruf des
- Programmes die entsprechende Diskette einlegen. Mit zwei Disket-
- tenlaufwerken geht die Arbeit etwas bequemer. Wer über genügend
- Speicherplatz verfügt, kann sich nach Belieben eine Ramdisk
- anlegen, und von dort die Programme aus der Schale aufrufen. Der
- größte Komfort wird unter Verwendung einer Festplatte erreicht.
- Da hier die Ladezeiten bei Bruchteilen einer Sekunde liegen, ist
- man so schnell im neuen Programm, daß man meinen könnte, es wäre
- Bestandteil der Weller-TOOLS für GFA-BASIC.
-
-
- ə3.3.2 Konfiguration der festen GFA-Programmschale
-
- Diese Schale wird über die Datei 'WT_GFA.INF' konfiguriert.
- Folgende Datei ist dem Programm beigelegt:
-
- A:\MENUX.PRG * In dieser Datei stehen Pfadangaben und
- A:\GFABASIC.PRG * Dateinamen für die feste Programm-
- A:\GFABASI2.PRG * schale ab V3.01. Reihenfolge: Menux,
- A:\GFA_BCOM.PRG * Interpreter V3, Interpreter V2, Compi-
- A:\TEMPUS.PRG * ler V2, Editor (z.B. Tempus ab V1.10).
-
- Beim Starten des Programmes wird diese Datei geladen, falls
- sie vorhanden ist. Sie muß sich im gleichen Pfad befinden, wie
- das Programm selbst. Der Ladevorgang wird kurz am Bildschirm
- angezeigt. Es bleibt einem unbenommen, andere Programme als die
- vorgesehenen einzutragen.
-
- Der Texteditor wird besonders behandelt. Diesem wird über
- einen sog. 'Enviroment-String' eine Ladeanweisung mitgegeben:
-
- - Falls noch keine LST-Datei geladen wurde, wird keine Ladean-
- weisung übergeben.
-
- - Falls bereits eine LST-Datei geladen wurde und noch keine
- Ausgabedatei produziert wurde, wird diese Datei vom Editor
- geladen.
-
- - Falls schon eine Ausgabedatei produziert wurde, werden die
- sowohl die LST-Datei als auch die Ausgabedatei vom Editor
- geladen.
-
- Dieser automatische Ladevorgang funktioniert nur mit Text-
- editoren, die den Enviroment-String auslesen. Das ist bei-
- spielsweise bei Tempus ab V1.10 und 1st Word Plus ab V2.02 der
- Fall.
-
- Die Schale ist sehr stabil. Sie verträgt die meisten
- Abstürze in den aufgerufenen Programmen und meldet Programm-
- eigene Desktops wieder ab, falls das vom Programm selbst nicht
- erledigt wurde (alte Versionen von 1st Word Plus und Tempus).
-
-
- ə3.3.3 Die flexible Programmschale
-
- Mit dieser flexiblen Programmschale können bis zu 100
- Programme direkt aufgerufen werden. Dazu muß nur der
- entsprechende vordefinierte Eintrag in der Menüleiste angewählt
- werden.
-
- Die Programmschale besitzt eine eigene Menüleiste, welche
- frei zusammengestellt werden kann. Dabei können sowohl die
- Einträge in der Menüleiste frei bestimmt werden als auch evt.
- Kommandostrings, die manche Programme auswerten. Diese Pro-
- grammschale wird über die Datei WT_GFA.FSL konfiguriert (siehe
- Kapitel 5.2.4). Es kann jederzeit über den Menüpunkt 'FSL-Datei
- laden' eine andere Konfiguration verwendet werden.
-
- Mit '-> Hauptmenü' gelangt man wieder zur Menüleiste des
- Hauptprogrammes. Auch in der flexiblen Programmschale können
- Accessories aufgerufen werden.
-
-
- ə3.2.4 Desktop-Funktionen
-
- Die wichtigsten Funktionen des Desktops sind hier erreich-
- bar. Man kann:
-
- - beliebige Programme starten
- - Dateien löschen
- - Dateien umbenennen
- - Dateien kopieren
- - neue Ordner erzeugen
- - den freien Speicherplatz eines Laufwerks ermitteln.
-
- Damit wird manches andere Accessory überflüssig, bzw. das
- Verlassen des Programms. Da die graphische Benutzeroberfläche des
- Desktops hier fehlt, werden die Aktionen von Hinweisen in der
- Titelzeile begleitet.
-
- Beispiel: Datei umbenennen
-
- Zuerst wählt man mit der Dateiauswahlbox die Datei an, die
- umbenannt werden soll. Dann gibt man mit Hilfe der nächsten
- Dateiauswahlbox den neuen Namen an. Mit 'Abbruch' kann die Aktion
- jederzeit abgebrochen werden. Ein Verschieben durch Umbenennen
- ist nicht möglich.
-
- Mit 'Set-Datei laden' können weitere beliebige Konfiguratio-
- nen nachgeladen werden.
-
-
- ə3.3.5 Aspekte des Speicherplatzes
-
- Bevor ein externes Programm aufgerufen wird, wird der
- gesamte Speicherplatz, der momentan nicht vom Programm benötigt
- wird, an GEM zurückgegeben (RESERVE 0), so daß sich das aufgeru-
- fene Programm selbst bedienen kann.
-
- Trotzdem kann es vorkommen, daß der Speicherplatz nicht
- ausreicht, denn der Programmcode und die internen Variablen des
- Programms bleiben, während das aufgerufene Programm läuft, im
- Speicher im Hintergrund erhalten. Dadurch kann es Speicherplatz-
- probleme geben. Deshalb gibt es die Funktion 'Speicher freige-
- ben'. Dabei werden einige Felder und Variablen im Programm
- gelöscht.
-
-
- ə3.4 X-REF
-
-
- ə3.4.1 Zweck der Cross-Reference-Listen
-
- Die wichtigste Unterstützung bei der Entwicklung eines Pro-
- grammes ist die Erzeugung einer aussagekräftigen Cross-Reference-
- Liste, zu deutsch: 'Wechselbeziehungsliste'. Diese hilft, sowohl
- Tippfehler als auch logische Fehler schnell aufzufinden. Den
- Sprachdefinitionen von GFA-BASIC tragen die Weller-TOOLS für GFA-
- BASIC dabei voll Rechnung, insbesondere der Trennung zwischen
- lokalen und globalen Variablen und Übergabeparametern.
-
- In der Cross-Reference-Liste werden alle Variablen, Procedu-
- ren und Marken (labels) aufgeführt. Variablen werden nach lokalen
- und globalen Variablen sowie Übergabevariablen unterschieden.
- Offensichtliche Fehler, z.B. die nur einmalige Verwendung einer
- Variable, werden protokolliert. Bei globalen Variablen werden
- Vorschläge unterbreitet, z.B wenn überlegt werden sollte, ob die
- Variable lokal gemacht werden sollte. Mehrfache Verwendungen von
- Namen für verschiedene Variablentypen werden aufgeführt.
-
- Mit Hilfe dieser Funktion kann besonders in umfangreichen
- Programmen Variablen-Müll beseitigt und die Verwendung von Va-
- riablen unter Speicherplatz- und logischen Gesichtspunkten opti-
- miert werden.
-
- Das erste Cross-Reference-Listing für GFA-BASIC wurde im
- Artikel 'Cross-Referenz-Listings in GFA-BASIC' von H. Bauch in
- der 'ST Computer' Nr. 5/87 S. 36-46 vorgestellt. Der Begleittext
- endet mit dem Satz: 'Mit X-REF sollte dem GFA-BASIC-Programmierer
- das Leben hinsichtlich des Aufspürens von Tippfehlern, aber auch
- bei der Verbesserung der Dokumentation, erleichtert werden.'
-
-
- ə3.4.2 X-REF erzeugen
-
- Mit dem Menüpunkt 'X-REF erzeugen' wird der Prozeß gestar-
- tet. Falls noch keine Datei geladen wurde, macht eine Alert-Box
- darauf aufmerksam.
-
- Die Programmdatei muß als ASCII-Datei vorliegen. Diese wird
- im Interpreter mit 'SAVE,A' als LST-Datei erzeugt. *.GFA und
- *.BAS-Dateien sind keine ASCII-Dateien. Um auf einfache Weise
- Statements von Namen unterscheiden zu können, muß das Programm
- mit 'DEFLIST 0' abgespeichert werden. Diese Einstellung ist die
- Standardeinstellung ab der Version 2 des GFA-BASIC-Interpreters.
- Dabei werden alle Statements groß geschrieben (PRINT, WHILE...)
- und alle Namen klein (file$, pos%,...). Es wird nicht überprüft,
- ob die geladene Datei tatsächlich diesen Anforderungen ent-
- spricht.
-
- Während der Erzeugung einer Cross-Reference-Liste wird ein
- Protokoll erzeugt. Die Ausgabe wird auf die in 'Ausgabegeräte'
- bestimmten Geräte geleitet. Bei Dateien wird die für Protokolle
- übliche Endung 'LOG' vorgeschlagen.
-
- Das Protokoll ist ein ASCII-Text, der nicht in den unter
- 'Druckerparameter' eingestellten Werten formatiert wird. Deshalb
- kann eine Zeile länger als die maximal Breite einer Zeile werden,
- die ein Editor akzeptiert (1st Word Plus 150, Tempus 255 Spal-
- ten).
-
-
- Beispiel: Protokoll-Datei (*.LOG)
-
- X-REF Protokoll am 21.11.88 um 22:45
- ------------------------------------
- 23 0.4% pd
- 60 1.6% e_select
- 100 3.0% e_pars
- 123 3.5% e_statistics
- ...
-
- 1142 35.9 new_var_typ
- 1149 36.1 test_error
- 1195 37.3 xref_out_lines
- 1212 37.8 xref_out_procs
- 1311 40.7% xref_out_locals
- ...
-
- Die Erzeugung einer Cross-Reference-Liste ist eine aufwen-
- dige analytische Arbeit. Die Weller-TOOLS für GFA-BASIC arbeiten
- aufgrund einiger Maschinenroutinen so schnell, daß selbst bei
- einer 300 kB großen Datei das Ergebnis nach drei bis fünf Minuten
- erwartet werden kann.
-
-
- ə3.4.3 X-REF ausgeben
-
- Bei der Erzeugung werden die Ergebnisse der Cross-Reference-
- Analyse im Speicher abgelegt. Erst durch 'X-REF ausgeben' werden
- sie in eine Form gebracht, die aussagekräftig ist. Die Ergebnisse
- können mehrmals - auf verschieden Weise - ausgegeben werden.
-
- Variationen ergeben sich durch die Wahl verschiedener Ausga-
- begeräte und deren verschiedene Parameter, durch die Auswahl
- dessen, was alles ausgeben werden soll, sowie zwei verschiedenen
- Reference-Modi: der Proceduren-Reference und der Zeilen-Refe-
- rence.
-
- Bei der Zeilen-Reference werden die gefundenen Namen unter
- Angabe der Zeilennummern, in der sie auftreten, aufgeführt. Kommt
- ein Name in einer Zeile mehrmals vor, wird er nur einmal genannt.
- Diese Form der Cross-Reference ist die gebräuchliche, und hierfür
- gibt es für GFA-BASIC bereits ein paar Public-Domain-Programme.
-
- Die Zeilennummern beginnen immer ab Spalte 20. Falls ein
- Name länger als 18 Zeichen ist, beginnen die Zeilennummern eine
- Zeile tiefer. Die Zeilennummern haben maximal 6 Dezimalstellen,
- was bedeutet, daß die obere Grenze bei 999999 Zeilen liegt. Gibt
- es mehr Zeilennummern, als in die durch die maximale Drucker-
- oder Bildschirmbreite definierte Zeile paßt, werden die folgenden
- Zeilennummern umgebrochen, d.h. in die nächste Zeile gesetzt.
-
- Bei der Proceduren-Reference werden zusätzlich diejenigen
- Proceduren aufgeführt, in denen ein Name (d.h. eine Variable,
- Procedure oder ein Label) vorkommt. In einer strukturierten
- Sprache wie GFA-BASIC ist diese Form wesentlich aussagekräftiger.
- Am besten erkennen Sie das an dem ausführlichen Beispiel auf den
- folgenden Seiten.
-
- Dabei werden die meisten Tipp- und sonstigen Flüchtigkeits-
- fehler von den Weller-TOOLS für GFA-BASIC erkannt und reklamiert.
- Dort, wo Optimierungen bei der Verwendung von Variablen ange-
- bracht sind (eigentlich: zu sein scheinen), wird ein entsprechen-
- der Vorschlag unterbreitet.
-
-
- ə3.4.4 Beispiel: Cross-Reference-Liste
-
- Die folgende Liste wurde nachträglich in kursiver Schrift kommen-
- tiert. Bei diesem etwas älteren Beispiel handelt es sich um GFA-
- V2-Code.
-
- Cross-Reference-Liste von: E:\WT_GFA\WT_110.LST
- Erzeugt von X-REF der Weller-TOOLS für GFA-BASIC
- am 21.11.1988 um 23:18:38
- =================================================================
-
- Datei: E:\WT_GFA\WT_110.LST
- Größe: 101033 Byte
- Anzahl Zeilen: 3254
- Anzahl Proceduren: 113
- 1 Real-Variablen
- 1 Real-Felder
- 41 Integer-Variablen
- 3 Integer-Felder
- 32 String-Variablen
- 9 String-Felder
- 22 Boolean-Variablen
- 0 Boolean-Felder
- 102 Proceduren
- 11 Proceduren mit Übergabeparameter
- 7 Labels
-
- 1 Real-Variablen
- ------------------------------------
-
- o...................xref_show_max_nam_anz 996
- *** Kommt in nur einer Procedure vor! Evt. lokal definieren!
- *** Fehler: o kommt nur einmal vor! Tippfehler?
-
- Hier handelte es sich tatsächlich um einen Tippfehler. Gemeint
- war die Ziffer 0. Der Fehler tritt nie als Runtime-Fehler auf,
- da folgendes vorlag: FOR i%=o to 5. Es werden aber 6 Byte
- Speicherplatz angelegt, auch wenn die Variable 'o' nie benützt
- würde. MERGE-Dateien von Resource-Construction-Sets produzieren
- i.a. mehr Deklarationen, als dann tatsächlich benötigt werden.
-
-
- ...
-
- 41 Integer-Variablen (=41 * 4 Byte = 164 Byte)
- ------------------------------------
-
- adr%................e_select 87
- e_statistics 124 130 133 138
- statistics 177 185 208 233
- xref_make 573 627
- xref_proc_nam 671 675 698 701
- ol_filter 1556 1603
- klapper 1725 1745
- num_lines 1782 1796
- look_between 1974 1982 1988 1992
- remkill 2044 2064
- print_listing 2201 2222 2242
- kopf 2299
- line_input 2719 2721 2722 2723
-
- Soooo übersichtlich! Man kann genau erkennen, wo diese Variable
- überall vorkommt. Die Angabe der entsprechenden Proceduren ist
- dabei wesentlich informativer, als alleine die Zeilennummern.
-
- cnt_c%..............statistics 184 187 192
- *** Kommt in nur einer Procedure vor! Evt. lokal definieren!
-
- Hier wird der Rat nicht befolgt, da die Procedure statistics
- öfters aufgerufen wird, wobei evt. schon berechnete Werte nicht
- noch einmal berechnet werden sollen.
-
- ...
-
- 3 Integer-Felder
- ------------------------------------
-
- proc_start%().......xref_make 547 550 551
- xref_proc_nam 656
- xref_out_procs 1225 1243
-
- ...
-
- 32 String-Variablen
- ------------------------------------
-
- e_ext$..............xref_clear 1487
- *** Kommt in nur einer Procedure vor! Evt. lokal definieren!
- *** Fehler: e_ext$ kommt nur einmal vor! Tippfehler?
-
- Tatsächlich, hier war noch eine Variable aus früheren Versionen
- liegengeblieben, die nicht mehr benötigt wird, und versehentlich
- nicht entfernt wurde.
-
- info$...............HAUPTPROGRAMM 12 13
- xref_clear 1487
- init_vars 2488 2489
- info 2799 2801
-
- So sieht das aus, wenn eine Variable nicht nur in Proceduren
- vorkommt, sondern auch im Hauptprogramm.
-
- ...
-
- 9 String-Felder
- ------------------------------------
-
- bomb$().............bombs 2727 2728 2729 2733 2736 2739
- *** Kommt in nur einer Procedure vor! ERASE in dieser Procedure?
-
- Diese Meldung soll den Mißstand vermeiden helfen, daß Felder, die
- nur vorübergehend benötigt werden (hier: Sprites), nicht mehr
- gelöscht werden.
-
- ...
-
- 22 Boolean-Variablen
- ------------------------------------
-
- komm_found!.........xref_entf_komm 762 767 771
- *** Kommt in nur einer Procedure vor! Evt. lokal definieren!
-
- Hier war beim Programmieren noch nicht sicher, ob diese Variable
- auch noch außerhalb benötigt würde (was dann offensichtlich nicht
- der Fall war). Also in die LOCAL-Liste übernehmen.
-
- prt_ready!..........print_listing 2154 2157 2159 2161
- *** Kommt in nur einer Procedure vor! Evt. lokal definieren!
-
- Dito
- ...
-
-
- 102 Proceduren ohne Übergabeparameter
- ------------------------------------
-
- ...
- xref_out............pd 39
- xref_out 1012
-
- xref_out_items......xref_out 1058
- xref_out_items 1083
-
- xref_out_locals.....xref_out 1061
- xref_out_locals 1311
-
- xref_out_multi......xref_out 1064
- xref_out_multi 1368
-
- xref_proc_nam.......xref_make 609 612 zweimal verwendet
- xref_proc_nam 650 einmal definiert
-
- xref_proc_ref.......pd 40
- xref_proc_ref 1445
-
- In großen Programmen hat man einen besseren Überblick, wenn
- Gruppen von Funktionen und Variablen nach festem Schema benannt
- werden (orthogonale Namensstruktur, ungarische Notation, ...).
- Das hier sind ein paar Proceduren aus dem MODUL xref. Die
- lokale Variablen hier beginnen ebenfalls mit 'xref_'.
-
- ...
-
- 11 Proceduren mit Übergabeparameter
- ------------------------------------
-
- test_error()........xref_out_items 1134
- test_error 1149
-
- weg$()..............xref_make 605
- xref_suche_nam 848
- test_error 1157
- xref_out_procs 1278
- xref_out_multi 1382 1387 1391 1393 1407 1412
- scrn_halt 2788
-
- Hier ist noch eine Unzulänglichkeit in X-REF: weg$() ist keine
- Procedure, sondern eine definierte Funktion. Diese werden vorläu-
- fig noch als Procedure angesehen.
-
- ...
-
- 7 Labels
- ------------------------------------
-
- bomb_data...........bombs 2730
- 3038
- Wo ist die Zeile 3038? Sie steht hinter der letzten Procedure,
- nämlich dort, wo auch viele andere DATA's stehen (sog. 'DATA-Sec-
- tion'). Da man den DATA-Werten, sofern es sich um Zahlen z.B.
- eines Maschinenprogramms handelt, nicht viel ansehen kann, werden
- oft die DATA's aus dem algorithmischen Teil herausgenommen und an
- das Programmende plaziert.
-
- ...
-
- * Proceduren mit lokalen Variablen und/oder Übergabeparametern:
- ----------------------------------------------------------------
-
- Die Funktionen und Variablen werden unsortiert aufgeführt, also
- in der Reihenfolge, in der sie im Programmlisting vorkommen.
-
- pd..................pd_menu0%
- e_select............pos_nn% d%
- e_pars..............pos_nn% e_lw%
- statistics..........d% pos_nn% d$ t$ test$
- a_file_kontrolle....m$ bak% pos_nn%
- f_del...............f_del$
- f_copy..............f_copy_source$ f_copy_target$ f_copy
- _len%
- f_ren...............f_ren_source$ f_ren_target$
- dir_make............dir_make$
- d_free..............lw$
- ...
- bombs...............bomb_nn% bomb_front% bomb_rear%
-
- Auch wieder ein Beispiel für die Namensvergabe.
-
- Mehrfache Verwendung von Namen in verschiedenen Variablentypen:
- ---------------------------------------------------------------
-
- akt_lw% für Integer-Variablen
- und akt_lw$ für String-Variablen
-
- weg% für Integer-Variablen
- und weg$ für String-Variablen
-
- proc$ für String-Variablen
- und proc$() für String-Felder
-
- zeile$ für String-Variablen
- und zeile$() für String-Felder
-
- Insgesamt 4 Mehrfachbelegungen für Namen
-
- Mit Hilfe dieser letzten Liste kann man ebenfalls Tippfehler
- auffinden. Wie oft wird versehentlich ein '%' vergessen oder
- versehentlich die '5' gedrückt.
-
-
- ə3.4.5 Unzulänglichkeiten
-
- In GFA-BASIC gelten lokale Variablen nicht nur in derjenigen
- Procedure als lokal, in der sie definiert werden, sondern auch in
- allen von dieser Procedure aufgerufenen Proceduren. Es mag zwar
- kein guter Programmierstil sein, solche Variablen nicht als
- Übergabe-Variablen weiterzugeben, es ist aber in GFA-BASIC
- erlaubt. Bei den Weller-TOOLS für GFA-BASIC wird aber eine lokale
- Variable nur innerhalb derjenigen Procedure als lokal angesehen,
- in der sie definiert wird.
-
- VAR-Variablen werden wie lokale Variablen gehandhabt, sie
- verändern aber den Wert globaler Variablen. Die X-REF-Funktion
- ist nicht so intelligent, Pointer-Operationen (Call by Reference,
- was die VAR-Funktion darstellt) zu verfolgen. Das gleiche gilt
- für den *-Pointer-Operator.
-
- X-REF erzeugen: Bei Speicherknappheit (ca. 45 kB) während X-
- REF erzeugen kann das Programm abstürzen. Dieser Fehler wurde
- erst einmal beobachtet). Bei einem ST mit einem 1 MB Speicher
- sollten LST-Programme bis etwa 400 kB analysiert werden können.
-
- X-REF ausgeben: Real-Zahlen mit Exponent werden als zwei
- Variablen gedeutet (2.9E-9 -> 2.9E und 09.)
-
-
- ə3.4.6 Speicherbedarf der X-REF-Funktion
-
- Im Protokoll werden die maximale Anzahl Variablen, die
- WT_GFA lesen kann, angezeigt. Beim Starten von X-REF wird diese
- Zahl in Abhängigkeit vom freien Speicher folgendermaßen berech-
- net:
-
- ' Maximale Anzahl verschiedener Variablen pro Variablentyp:
- var_nam_max%=MIN(FRE(0)\1000,5460)
-
- ' Maximale Anzahl lokaler Variablen pro Procedure/Function:
- lok_var_max%=MIN(255,var_nam_max%\10,65536\var_nam_max%)
- ^^^^^^^^^^^^^^^
-
- Diese Verteilung geht demzufolge davon aus, daß insgesamt
- etwa zehnmal soviele Variablen pro Variablentyp definiert werden,
- als maximal lokale Variablen (alle Typen) in einer Procedure
- definiert werden. Bei einem Programmierstil, der sehr viele
- lokale Variablen (z.B. > 35) pro Procedure verwendet, wird der
- Speicher in WT_GFA nicht effizient aufgeteilt.
-
-
- Um Abhilfe zu ermöglichen, kann das o.g. Verhältnis
- gepatched werden. Dazu muß mit einem Diskettenmonitor die Stelle
- " LOKVAR=10 " (ziemlich am Ende von WT_GFA.PRG) entsprechend
- verändert werden. Zulässig sind Werte von " LOKVAR=01 " bis
- " LOKVAR=99 ".
-
-
-
- ə3.5 OUTLINE
-
-
- ə3.5.1 Funktionsweise von OUTLINE
-
- Die steuerbare Outline-Funktion hilft bei der Strukturierung
- von Programmen, indem sie einen gezielten Einblick in die
- Hierarchie von Proceduren, die Verwendung von BASIC-Befehlen
- sowie die Veränderung von Variablen gibt.
-
- In einer Schlüsselwort-Liste werden dazu die Schlüsselworte
- (oder auch nur Fragmente davon) eingetragen, nach deren Vorkommen
- im Programm gesucht wird. In der Outline-Liste werden dann alle
- Proceduren mit den entsprechenden (eingerückten) Zeilen ausgege-
- ben. Darin kann dann z.B. die falsche Verwendung von RESERVE,
- GEMDOS(),HIMEM, FRE(0) usw. erkannt werden.
-
- Die Outline-Funktion kann Fehler nicht (im Gegensatz zu X-
- REF) von sich aus und automatisch finden. Durch die Darstellung
- eines extrem reduzierten Teils des Programmes wird jedoch die
- Fehlersuche und die Optimierung enorm unterstützt.
-
- Im folgenden sind ein paar Listen aufgeführt, mit denen
- besonders effektiv nach Fehlern gesucht werden kann (Achtung:
- Leerzeichen gelten wie ein normales Zeichen):
-
- OPEN, CLOSE , PRN:, CON:, NAME, LOF(, SEEK, BLOAD, BSAVE, CHAIN,
- CHDIR, CHDRIVE, DIR, DFREE, FILES, LOAD, LIST, MKDIR, RMDIR,
- SAVE, EOF, LOC, FIELD, GET, PUT, WRITE,
-
- FOR, NEXT, WHILE, WEND, REPEAT, UNTIL, DO, LOOP, EXIT IF
-
- Es können natürlich auch Variablennamen angegeben werden.
- Damit kann z.B. alle Zeilen angezeigt werden, in der eine
- Variable definiert, verändert oder verwendet wird.
-
- Die Liste läßt sich mit 'Hinzufügen' und 'Entfernen' leicht
- erzeugen bzw. verändern, oder mit 'Speichern' und 'Laden' auf ein
- Laufwerk schreiben bzw. von dort einlesen.
-
- Standardmäßig werden die Schlüsselbegriffe nicht in Kommen-
- taren und Zeichenketten gesucht. Wird dies gewünscht, kann es
- unter 'Berücksichtigen' angegeben werden.
-
-
- Beispiel einer Outline-Datei
-
- In dem folgenden Beispiel soll untersucht werden, ob die
- Behandlung verschiedener Ein-/Ausgabe-Kanäle 'sauber' program-
- miert sind. Es darf z.B. nicht vorkommen, daß eine Datei geöffnet
- werden soll, die bereits offen ist. Die folgende Datei wurde mit
- der Outline-Funktion erzeugt, nachdem der Runtime-Fehler 'Datei
- bereits geöffnet' auftrat.
-
- Datei: E:\WT_GFA\WT_107.LST 89529 Byte
- Schlüsselwörter:
- OPEN
- CLOSE
- PRN:
- -----------------------------------------------------------------
- PROCEDURE e_pars
- OPEN "I",#1,e_file$
- CLOSE #1
- PROCEDURE f_copy
- OPEN "I",#1,f_copy_source$
- OPEN "O",#2,f_copy_target$
- CLOSE #1
- CLOSE #2
- PROCEDURE exe_edit
- IF a_file$<>"" AND a_file$<>"PRN:"
- PROCEDURE xref_out
- OPEN "O",#2,a_file$
- CLOSE #2
- PROCEDURE ol
- OPEN "O",#2,a_file$
- CLOSE #2
- PROCEDURE ol_load
- OPEN "I",#1,ol_file$
- CLOSE #1
- PROCEDURE ol_save
- OPEN "O",#2,ol_file$
- CLOSE #2
- PROCEDURE out_init
- a_file$="PRN:"
- PROCEDURE init_exe
- OPEN "I",#1,akt_lw$+":"+akt_pfad$+"WT_GFA.INF"
- CLOSE #1
- PROCEDURE i_allg
- OPEN "O",#2,a_file$
- CLOSE #2
-
- In der etwa 100 Zeilen umfassenden, ziemlich langen Proce-
- dure 'xref_out', hat sich ein Fehler eingeschlichen: Es wird ein
- Ausgabekanal geöffnet und später wieder geschlossen. Das 'CLOSE'
- ist jedoch weiter eingerückt, so daß hier möglicherweise etwas
- nicht stimmt. Falls zwischendurch 'IF-ENDIF'-Strukte verwendet
- werden, kann es sein, daß das 'CLOSE' falsch positioniert wurde.
- Besonders bei stark verschachtelten Programmteilen kann dies
- leicht geschehen. Es empfiehlt sich also, diesen Programmteil im
- Interpreter noch einmal genauer anzusehen.
-
- Die anderen OPEN-CLOSE-Kombinationen sind gleich weit eingerückt,
- so daß hier (wahrscheinlich) keine Fehler vorliegen.
-
-
- ə3.5.2 Start
-
- Damit wird der Outline-Prozeß gestartet.
-
-
- ə3.5.3 Schlüsselwörter hinzufügen
-
- Damit können neue Schlüsselwörter in die Liste hinzugefügt
- werden. Dazu müssen die Schlüsselwörter, durch <Return> getrennt,
- nacheinander eingegeben werden. Eine Leereingabe beendet das
- Hinzufügen.
-
-
- ə3.5.4 Schlüsselwörter entfernen
-
- Damit können Schlüsselwörter aus der Liste entfernt werden.
- Es erscheint die Liste mit Nummern, die den Schlüsselwörtern
- zugeordnet sind. Durch Eingabe der Nummer wird das entsprechende
- Schlüsselwort gelöscht.
-
-
- ə3.5.5 Schlüsselwörter laden
-
- Damit kann eine Liste mit Schlüsselwörtern geladen werden.
- Falls ein Ordner "KEY" vorhanden ist, wird die Dateiauswahlbox
- automatisch auf dieses Verzeichnis eingestellt.
-
-
- ə3.5.6 Schlüsselwörter speichern
-
- Damit wird die Liste mit Schlüsselwörtern als ASCII-Datei gespei-
- chert.
-
-
- ə3.5.7 Kommentare berücksichtigen
-
- Normalerweise bleiben Kommentare unberücksichtigt. Z.B. wird die
- Zeile
-
- PRINT sys_frei% ! PRINT FRE(0)
-
- nicht ausgegeben, auch wenn 'FRE(0)' ein Schlüsselwort ist. Wenn
- 'Kommentare berücksichtigen' angewählt ist, wird diese Zeile
- ausgegeben.
-
-
- ə3.5.8 Zeichenketten berücksichtigen
-
- Normalerweise bleibt der Inhalt von Zeichenketten unberücksich-
- tigt. Z.B. wird die Zeile
-
- PRINT "HOW TO GET STARTED"
-
- nicht ausgegeben, auch wenn 'GET' ein Schlüsselwort ist. Wenn
- 'Zeichenketten berücksichtigen' angewählt ist, wird diese Zeile
- ausgegeben.
-
-
- ə3.5.9 Proceduren klappen
-
- Im Editor der Version 3 des GFA-BASIC-Interpreters gibt es
- bereits die Funktion 'Procedure klappen'. Die hier realisierte
- Funktion ist ähnlich, zeigt aber wahlweise zusätzlich zu den
- Procedure-Definitionen auch die Procedure-Aufrufe und Programm-
- Module an.
-
- Beispiel: Auszüge aus einer 'geklappten' LST-Datei
-
- Datei: E:\WT_GFA\WT_107.LST Datei: E:\WT_GFA\WT_107.LST 89529 Byte
- ------------------------------------------------------------
- ' MODUL Hauptprogramm
- @init_all
- @menu_set
- PROCEDURE pd
- @mount_info("")
- @menu_set
- ------------------------------------------------------------
- ' MODUL Datei
- PROCEDURE e_select
- @e_pars
- @e_statistics
- PROCEDURE e_pars
- PROCEDURE e_statistics
- @line_input
-
- ...
-
- ------------------------------------------------------------
- ' MODUL Printer
- PROCEDURE print_listing
- @mount_info("Listing Drucken (Abbruch mit ESC)")
- @out_init
- @prt_init
- @kopf
- @line_input
- IF LEFT$(zeile$,4)="PROC"
- IF LEFT$(zeile$,7)="' MODUL"
- modul$=MID$(zeile$,INSTR(zeile$,"MODUL"))
- @fuss
- @kopf
- @fuss
- @kopf
- @print_line
- @fuss
- @no_e_file
- PROCEDURE print_line
- PROCEDURE kopf
- PROCEDURE fuss
- PROCEDURE prt_par
- PROCEDURE prt_test
- @prt_init
- PROCEDURE out_init
- @a_select
- PROCEDURE prt_init
-
-
- ə3.5.10 Proceduren auflisten
-
- Damit werden nur die Procedure-Namen aufgelistet.
-
-
- ə3.5.11 Module auflisten
-
- Damit werden die Zeilen, in denen Module definiert werden,
- aufgelistet. Module sind nicht von GFA-BASIC vorgesehen, sondern
- eine spezielle Erweiterung der Syntax in den Weller-TOOLS für
- GFA-BASIC (s.a. Kap. 3.6.1). Module werden durch Kommentare der
- folgenden Form definiert:
-
- ' MODUL modulname
-
-
- ə3.5.12 1-zeilige Funktionen auflisten
-
- Damit werden nur die 1-zeiligen Funktionsnamen aufgelistet.
-
-
- ə3.5.13 Mehrzeilige Funktionen auflisten
-
- Damit werden nur mehrzeilige Funktionsnamen aufgelistet.
-
-
- ə3.5.14 Lokale Variablen auflisten
-
- Damit werden nur die lokalen Variablen aufgelistet. Diese werden
- allerdings nur erkannt, wenn die zwei Leerzeichen vor 'LOCAL'
- auch vorhanden sind (also nicht durch den REM-Killer entfernt
- wurden).
-
-
-
- ə3.6 DIVERSES
-
-
- ə3.6.1 Listing-Druck-Funktion
-
- Die Listing-Druck-Funktion unterstützt die Verwendung von
- Programm-Modulen und die Verwendung von Namen nach einem 'quasi-
- ungarischen' Code. Drucker mit breiter Papierwalze (15 Zoll)
-
- werden unterstützt. Eine ordentliche und präzise Formatierung der
-
- Seiten ist selbstverständlich. Die Seitenparameter können frei
-
- eingestellt werden.
-
- Wichtig: Die Wahl des Ausgabegeräts und 'Datei' gilt auch
- für die Listing-Druck-Funktion. Wenn also auf Drucker ausgegeben
- werden soll, muß 'Drucker' als Ausgabegerät angewählt sein!
-
- Die Option 'Drucken in Datei' ist kann besonders hilfreich
- sein beim Drucken des Listing. Wer seine Privat-Listings mit
- einigen hundert Seiten im Betrieb oder in der Universität (am
- besten auf einem Seiten- oder einem Laserdrucker) ausdrucken
- möchte, dort aber kein Atari ST steht, kann mit einem MS-DOS-
- oder VMS-Computer über den 'Copy file.prn >PRN:'-Befehl das
- Listing auf dem dort zur Verfügung stehenden Drucker ausgeben. Es
- muß lediglich ein mechanisch passendes Laufwerk zur Verfügung
- stehen, da das Diskettenformat des Atari ST nicht wesentlich von
- dem anderer Computer abweicht.
-
-
-
- ə3.6.2 Listing numerieren
-
- Damit wird ein Listing numeriert. Die Formatierung orien-
- tiert sich automatisch an der höchsten Zeilennummer, damit nicht
- zuviele linke Leerzeichen gesetzt werden.
-
-
- ə3.6.3 Zeilenoffset
-
- Damit wird eingestellt, welche Nummer die erste Zeile haben
- soll. Im V3-Interpreter hat die erste Zeile die Nummer 0, in
- Tempus und 1st Word Plus die Nummer 1. Voreingestellt ist 0.
-
-
- ə3.6.4 Kommentare löschen
-
- Mit dieser Funktion sind wir bei der Sparte 'REM-Killer'
- angekommen, womit auch schon fast alles gesagt wäre. Außer:
-
- Wahlweise können auch die links stehenden Leerzeichen ent-
- fernt werden. Die Länge der erzeugten NOR-Datei ('NO R'emarks)
- entspricht dann etwa der Anzahl Zeichen, die man zum Abtippen des
- Listings eingeben muß.
-
- Außerdem können wahlweise Kommentarzeilen, also REM- oder '-
- Zeilen, durch ein '-Zeichen ersetzt werden, damit die Anzahl
- Zeilen insgesamt nicht verändert wird.
-
- Durch diese erweiterten Möglichkeiten des REM-Killer, vor
- allem der entfernung links stehender Leerzeichen, können LST-
- Programme oft auf die Hälfte der Dateigröße reduziert werden. Für
- den GFA-BASIC-Interpreter ergeben sich dadurch keinerlei Inkompa-
- tibilitäten beim 'Mergen'.
-
-
- ə3.6.5 Statistik
-
- Hinter dieser Funktion befindet sich derzeit nur ein einfa-
- cher, aber sehr schneller Zähler, der etwa 500 kB pro Sekunde
- durchforstet. Diese Assemble-Routine stammt, wie auch weitere
- Programmteile in den Weller-TOOLS für GFA-BASIC, vom Programmier-
- Kollegen Henrik Alt, Autor des Virenkillers Sagrotan.
-
- Damit wird z.B. folgende Statistik erzeugt:
-
- Datei: E:\WT_GFA\WT_110.LST
- Größe: 101094 Byte
- Anzahl Zeilen: 3256
- Anzahl Proceduren: 111
- .. Näherung
-
- Wie kann man so schnell aus einer LST-Datei die Anzahl der
- Proceduren ermitteln? Ganz einfach: Man sucht die erste Proce-
- dur, und zählt dann alle Vorkommnisse des Musters $0A $50. Damit
- werden alle großen 'P's gezählt, die am Anfang einer Zeile
- stehen. Und die gibt es bekanntlich nur bei 'PROCEDURE'.
-
- Anzahl eingerückter Zeilen: 2701
- Anzahl nicht eingerückter Zeilen: 555
- Länge des Programmes ohne Procs: 333
- Anzahl von 'C:' (C-Calls): 12
- Anzahl von '##' (z.B. USINGS): 36
- Anzahl von '(#' (z.B. Kanäle): 9
- Anzahl von '()' (z.B. ERASE): 47
- Häufigkeit einiger Zeichen mit besonderer Bedeutung:
- 32 $20 24352 Die Aussagekraft dieser Zahlen hält sich in
- ! 33 $21 567 Grenzen.
- " 34 $22 1917
- # 35 $23 186
- $ 36 $24 1440
- % 37 $25 1317
- ...
- = 61 $3D 808
- @ 64 $40 270
- \ 92 $5C 33
-
-
-
- ə3.6.6 Datamake
-
- Dieses Luxus-Datamake erzeugt aus beliebigen Dateien nicht
- nur die DATA-Zeilen, sondern auch gleich die zugehörige Lese-
- schleife mitsamt Prüfsumme.
-
- Beim DATA-Format kann gewählt werden, ob in einer DATA-Zeile
- 8 oder 16 Werte stehen sollen, und ob führende Nullen der Über-
- sichtlichkeit wegen beibehalten werden sollen.
-
- Die Prüfsumme cs% wird eigentlich nur dann benötigt, wenn
- das Programm als Listing veröffentlicht werden soll. Datamake
- selbst macht natürlich keine Fehler.
-
- In den DATA's befinden sich z.B. Maschinenprogramme oder
- Bilder. Auf Einzelheiten der Verwendung der erzeugten Zeichenket-
- ten soll hier nicht eingegangen werden.
-
-
- Beispiel: ein Bild im Bit Image-File-Format, IMG-Bild:
-
- SNAPSHOT.IMG:
- '
- DATA 1,8,1,2,174,174,60,C
- DATA 800C,C67E,6060,7EF8,7E,0,3800,800C
- DATA C67E,6060,7EFC,7E,0,3800,800C,C660
- DATA 6060,60CC,18,0,1800,800C,C660,6060
- DATA 60CC,18,3C3C,183E,800C,C67C,6060,7CCC
- DATA 7E18,7E7E,187E,800C,D67C,6060,7CFC,7E18
- DATA 6666,1860,800C,D660,6060,60F8,18,6666
- DATA 1870,800C,FE60,6060,60D8,18,6666,183C
- DATA 800C,FE60,6060,60CC,18,6666,180E,800C
- DATA EE60,6060,60CC,18,6666,1806,800C,C67E
- DATA 7E7E,7EC6,18,7E7E,3C7E,800C,827E,7E7E
- DATA 7EC6,18,3C3C,3C7C
- '
- RESTORE SNAPSHOT.IMG
- SNAPSHOT.IMG$=SPACE$(184)
- cs%=0
- FOR i%=0 TO 182 STEP 2
- READ wort$
- wort%=VAL("&H"+wort$)
- ADD cs%,wort%
- cs%=cs% AND &HFFFF
- DPOKE VARPTR(SNAPSHOT.IMG$)+i%,wort%
- NEXT i%
- IF cs%<>56920
- PRINT "Fehler in DATA's bei SNAPSHOT.IMG"
- VOID INP(2)
- EDIT
- ENDIF
-
-
- ə3.6.7 Speicher freigeben
-
- Diese Funktion löscht einige interne Variablen und Felder,
- so daß Programmen, die aus der Programmschale aufgerufen werden,
- mehr Speicher zur Verfügung steht.
-
- Am meisten Speicherplatz benötigen die Felder, die während
- der Erzeugung einer Cross-Reference-Liste dimensioniert werden.
- Das ist u.a. daran zu erkennen, daß der in der Infozeile
- angezeigte freie Speicherplatz beim Starten von X-REF drastisch
- schrumpft. Falls ein Bild WT_GFA.PIC und die Hilfe-Datei
- WT_GFA.HLP geladen wurden, werden sie mit dieser Funktion eben-
- falls gelöscht.
-
-
-
- ə3.7 HILFE
-
-
- ə3.7.1 Extrahilfe
-
- Wenn die Extrahilfe eingeschaltet ist, erscheint bei jedem
- Anklicken eines Menüeintrages eine Alert-Box mit einer kurzen
- Erläuterung der angewählten Funktion.
-
-
- ə3.7.2 Inhaltsverzeichis
-
- Zeigt das Inhaltsverzeichnis der Hilfstexte in Form von
- Kapitelnummern an.
-
-
- ə3.7.3 Kapitel zeigen
-
- Mit dieser Hilfe-Funktion können Sie sich Teile dieses
- Handbuches auf den Bildschirm einblenden lassen.
-
- Dafür muß sich allerdings die Datei WT_GFA.HLP beim Pro-
- grammstart dort befinden, wo sich auch das Programm befindet.
- Diese Datei ist eine um spezielle Zeichen erweiterte ASCII-Datei
- (s. Kapitel 5.2.3) und wird vollständig in den Speicher geladen.
- Mit 'Speicher freigeben' wird diese Hilfsdatei aus dem Speicher
- gelöscht.
-
-
-
-
- ə4. DAS VERTRIEBSKONZEPT DER WELLER-TOOLS FÜR GFA-BASIC
-
- Die Weller-TOOLS für GFA-BASIC gibt es in einer Public-
- Domain-Version und in einer Profi-Version. Bei der Public-Domain-
- Version gibt es nur eine einzige Einschränkung: Die Größe der
- bearbeitbaren LST-Programme beträgt maximal 100 kB. Dagegen sind
- alle Funktionen integriert, und natürlich können auch alle
- Ergebnisse ausgedruckt oder abgespeichert werden. Damit können
- selbst größere Programme optimiert oder untersucht werden. Für
- Profis, die noch größere Programme schreiben, dürften die DM 79,-
- - für eine Version ohne 100 kB-Beschränkung kein Hindernis
- darstellen.
-
- Da die Erträge bei Public-Domain-Programmen sich in Grenzen
- halten (wenn es gut läuft, kann man sich davon gerade die
- Festplatte finanzieren, die man eigentlich nur wegen der Erstel-
- lung gerade jenes Public-Domain-Programmes gekauft hat), möchte
- der Autor nicht auf die diese Zweigleisigkeit mit der kB-
- Beschränkung verzichten.
-
- Die Profi-Version kostet DM 79,-- inkl. 14% MwSt plus
- Versandkosten. Diese betragen DM 5,-- bei Vorkasse (Überweisung,
- V-Scheck, Bar oder Postanweisung), DM 8,-- bei Nachnahme (nur
- Inland) bzw. DM 10,-- bei Auslandsbestellungen (nur Vorkasse).
- Updates der Public-Domain-Version kosten DM 10,-- plus Versand-
- kosten. Die Lieferungen erfolgt mit einer Quittung mit ausgewie-
- sener MwSt. Bei Ländern aus Ostblockstaaten (da kommen tatsäch-
- lich Bestellungen her!) muß man sich vorläufig irgendwie anders
- arrangieren (Kompensationsgeschäfte).
-
- - Kto. 1820 001, Raiffeisenbank Rot-Kocher eG in Fichtenberg,
- Blz 600 694 70
- - Kto. 296325-709, Postgiroamt Stuttgart, Blz 600 100 70
-
- Es ist damit zu rechnen, daß die ersten Programmversionen
- ab V 3.02 nach kurzer Zeit aufgrund der Anwender-Reports verbes-
- sert werden (wie beim GFA-Interpreter und -Compiler). Deshalb
- gibt es für die Public-Domain- und die Profi-Versionen Updates
- für DM 10,--. Diese Updates können schon im voraus, quasi 'auf
- Abruf', vorbestellt werden. Bei Fertigstellung werden sie dann
- automatisch zugesandt. Die Einsendung eines 'Anwender-Reports'
- ist natürlich unabhängig von einer Bestellung.
-
-
- ə5. ANHANG
-
-
-
- ə5.1 LIEFERUMFANG
-
- Folgende Ordner und Dateien gehören zum Lieferumfang der
- Weller-TOOLS für GFA-BASIC und befinden sich im Ordner WT_GFA:
-
- WT_GFA.PRG Programmdatei Profi-Version.
- und/oder
- WT_GFAPD.PRG Programmdatei Public-Domain-Version mit 100 kB-
- Beschränkung.
-
- WT_GFA.INF ASCII-Datei mit Pfadangaben für feste GFA-Pro-
- grammschale. Wird automatisch geladen.
-
- WT_GFA.FSL ASCII-Datei mit Pfadangaben für flexible Pro-
- grammschale. Wird automatisch geladen.
-
- WT_GFA.HLP Hilfe-Datei, wird automatisch geladen.
-
- WT_GFA.PIC Bild-Datei, wird automatisch geladen.
-
- README.TXT Textdatei mit aktuellen Hinweisen.
-
- WT_INFO Ordner mit folgenden Ordnern und Dateien:
- WT_GFA.DOC Handbuch mit 64 Seiten als Textdatei für
- 1st Word Plus. Die Seitenformatierung ist auf
- Endlospapier mit 12 Zoll Länge eingestellt,
- kann aber auch mit automatischem Einzelblatt-
- einzug ausgedruckt werden, wenn der Drucker
- 66 Zeilen pro Einzelblatt-Seite drucken kann.
- Seitenformat: 72 - 3 - 3 - 3 - 3 = 60.
-
- \IMAGES Ordner mit 18 IMG-Bilddateien für WT_GFA.DOC:
- HELLO_WT.IMG, 1040ST.IMG, SCHEMA3.IMG,
- 1040SMAL.IMG, GFA_ETT.IMG, WINDOW3.IMG,
- L_WT_GFA.IMG, L_DATEI.IMG, L_SHELL.IMG,
- L_FDEMO.IMG, L_FWTGFA.IMG, L_FSHELL.IMG,
- L_XREF.IMG, L_OUTLIN.IMG, L_DIVERS.IMG,
- L_INFOS.IMG, WT_PD.IMG, WT_S.IMG.
-
- WT_GFA.TXT Handbuch als ASCII-Datei, unformatiert, maxi-
- mal 60 beschriebene Zeilen pro Seite. Im Text
- ist bereits ein linker Rand mit 8 Leerzei-
- chen. ASCII-Text mit Formfeeds CHR$(12). Wird
- von jedem Textprogramm gelesen und von jedem
- Drucker ausgedruckt.
-
- REPORT.TXT Formular 'Anwender-Report' als ASCII-Datei
-
- \DISK_ETT Ordner mit folgender Datei:
- WT_ETT.PRN Diskettenetikett für 9-Nadler zum direkten
- Ausdrucken aus dem Desktop per Doppelklick.
- Der Drucker muß eine Auflösung von 80 dpi
- horizontal und 1/72 Zoll vertikal haben. Für
- 24-Nadler FX-Emulator (FX_EMU.PRG) verwenden.
-
- DEMO Ordner mit informativen DEMO-Dateien (GFA V2):
- DEMO1.TXT Cross-Reference-Liste
- DEMO2.TXT Outline-Liste
- DEMO3.TXT 'Geklappte' Liste
- DEMO4.TXT Data-Liste
-
- KEY Ordner mit Beispieldateien für Schlüsselwörtern
- für Outliner:
- KANAL.KEY Diese ASCII-Dateien können auch mit jedem
- SPEICHER.KEY beliebigen Texteditor geschrieben werden.
- STRUKTUR.KEY Vorsicht bei Leerzeichen.
- DISK.KEY
- CASE_IF.KEY Damit sieht man schnell, welche IF - ELSE -
- ENDIF - Strukte in SELECT - CASE - ENDSELECT
- oder IF - ELSE IF - ENDIF umgewandelt werden
- können.
-
- WT_HD Ordner mit Hilfsprogrammen, ideal bei Festplatten-
- betrieb:
- WT_SETUP.PRG Komfortables Setup-Programm für Auto-Ordner.
- WT_FF.PRG Find File-Utility. Durchsucht ganze Fest-
- platte oder Diskette.
- WT_FT.PRG Find Text-Utility. Durchsucht ganze Fest-
- platte oder Diskette.
- WT_TREE.PRG Zeigt die Verzeichnis-Struktur der Festplatte
- oder Diskette grafisch an.
- WT_DOUBL.PRG Zeigt Dateien, die mehrfach auf der Fest-
- platte oder auf einer Diskette sind, an.
- README.TXT Kurzinfo für SETUP.PRG.
- MULTI.ACC Multi-Funktions-Accessory von Henrik Alt,
- ideal für Programmierer und Festplattenbesit-
- zer: u.a. MS-DOS-Betrieb von Laufwerk A: oder
- B: mit wahlweiser MS-DOS-Formatierung 360 kB
- oder 720 kB, Druckeranpassung für Epson- und
- IBM-Drucker (ersetzt z.B. PTESPON.PRG), Maus-
- beschleuniger, Software-Schreibschutz für
- beliebige Partitionen der Festplatte und für
- Diskettenlaufwerke, Kaltstart, Warmstart und
- Parkoption für Festplatte.
-
- Kleinere Änderungen möglich, siehe dazu Datei README.TXT.
-
-
-
- ə5.2 DATEIFORMATE
-
-
- ə5.2.1 WT_GFA.INF
-
- Diese Datei hat ASCII-Format und kann (in einem Texteditor)
- mit Kommentaren hinter dem *-Zeichen versehen werden. Der
- Dateiaufbau ist vorgeschrieben, d.h. daβ die Informationen in den
- gleichen Zeilen bleiben müssen.
-
- Falls die Datei bei Programmstart fehlt, werden interne
- Standardwerte gesetzt. Diese entsprechen folgender INF-Datei:
-
- A:\MENUX.PRG * In dieser Datei stehen Pfadangaben und
- A:\GFABASIC.PRG * Dateinamen für die feste Programm-
- A:\GFABASIC.PRG * schale ab V3.01. Reihenfolge: Menux,
- A:\GFA_BCOM.PRG * Interpreter V3, Interpreter V2, Compi-
- A:\TEMPUS.PRG * ler V2, Editor (z.B. Tempus ab V1.10)
-
-
- ə5.2.2 WT_GFA.PIC
-
- Diese Datei beinhaltet ein Bild im Screen-Format (32000
- Byte) in beliebiger Auflösung. Mitgeliefert wird ein Bild in
- hoher Auflösung.
-
- Das Bild wird unmittelbar nach Programmstart angezeigt, und
- auch wenn im DESK-Menü Info angewählt wird.
-
- Diese Datei wird automatisch beim Programmstart geladen. Um
- Zeit und Speicher zu sparen, kann sie auch gelöscht oder
- umbenannt werden. Mit einem Malprogramm können auch statt dem
- mitgelieferten Bild auch ein eigenes Bild geladen werden.
-
- Der 32 kB große Speicher, den diese Datei belegt, kann mit
- 'Speicher freigeben' freigegeben werden.
-
-
- ə5.2.3 WT_GFA.HLP
-
- Diese Datei enthält die Hilfstexte, die im wesentlichen mit
- dem Handbuch übereinstimmen. Sie besteht aus ASCII-Zeichen ab
- CHR$(32). Damit im Programm kein zusätzliches Index-Feld für die
- Kapitel benötigt wird, werden Kapitelüberschriften zusätzlich mit
- CHR$(26) gekennzeichnet. Die Datei kann z.B. mit dem Texteditor
- Tempus geändert werden, nicht jedoch mit 1st Word Plus.
-
- Der etwa 107 kB große Speicher, den diese Datei belegt, kann
- mit 'Speicher freigeben' freigegeben werden.
-
-
- ə5.2.4 WT_GFA.FSL
-
- Diese Datei enthält die Definitionen der flexiblen Pro-
- grammschale. Sie ist kompatibel zu einer früheren Version der
- flexiblen Programmschale 'Flesh'. Die erste Zeile enthält eine
- Kennung "FSL". In der zweiten Zeile steht, wieviele eigene Menüs
- herunterklappen können. Dann folgen jeweils die Titel mit der
- Anzahl Einträgen für diesen Titel, dann jeweils die einzelnen
- Einträge: Zuerst die Bezeichnung in der Programmschale, dann die
- Datei komplett mit Pfad, und schließlich ein Kommandostring
- (meistens leer). Es dürfen max. 100 Programme angegeben werden,
- wobei dem GEM bei langen Pfadangaben schon vorher der Puffer (für
- die Menüleiste) zu klein wird.
-
- "WT_GFA.FSL"
- 5
- "Text+Graf.",13
- " 1st Word Plus V3.15","C:\WP3\WORDPLUS.PRG",""
- " 1st XTRA V1.02","D:\WP_ADI\1ST_XTRA.PRG",""
- " Tempus V2.05 ","D:\WP_ADI\TEMPUS.PRG",""
- "---------------------","",""
- " Signum 2 ","D:\SIGNUM\SIGNUM2.PRG",""
- " Install ","D:\SIGNUM\INSTAL.PRG",""
- " Print 9 ","D:\SIGNUM\SPRINT9.PRG",""
- " Print 24 ","D:\SIGNUM\SPRINT.PRG",""
- " DCS 9 ","F:\P9\DCS9N.PRG",""
- " DCS 24 ","F:\P24\DCS24N.PRG",""
- "---------------------","",""
- " Public Painter V0.47","F:\PPM\PPM.PRG",""
- " Picture Converter","F:\PPM\PCONVERT\PCONVERT.PRG",""
- "Datei/Calc",5
- " Adimens Exec V2.3 ","D:\WP_ADI\EXEC.PRG",""
- " Adi Talk V2.3","D:\WP_ADI\UTILS\ADITALK.TTP","FAKTURA.TLP"
- " Init V2.3","D:\WP_ADI\UTILS\INIT.PRG",""
- " Reorg ","D:\ADI\UTILS\REORG.TTP",""
- " EZ Calc ","F:\CALC\EZCALC.PRG",""
- "GFA-Basic ",6
- " Interpreter 2.02","E:\GFABASIC.PRG",""
- " Compiler 2.02","E:\GFA_BCOM.PRG",""
- " Interpreter 3.07","E:\GFA3\GFABASIC.PRG",""
- " Menu X ","E:\GFA3\MENUX.PRG",""
- " RCS 2.1 ","E:\UTILS\RSC\RCS2.PRG",""
- " WT-GFA 3.02 ","E:\WT_GFA\WT_GFA.PRG",""
- "Utilities",8
- " WT_FF: Find File 1.04","C:\DISKUTIL\WT_FF.PRG",""
- " WT_FT: Find Text 1.03","C:\DISKUTIL\WT_FT.PRG",""
- " WT_DOUBL: Find Doubles ","C:\DISKUTIL\WT_DOUBL.PRG",""
- " WT_TREE: Tree","C:\DISKUTIL\WT_TREE.PRG",""
- " Dust (Hippotamus)","C:\DISKUTIL\DUST.PRG",""
- " Sagrotan 4.15","E:\WT_PD.002\SAGROTAN\SAGROTAN.PRG",""
- " Disk Looker DL II","C:\DISKUTIL\DL_II\DLII.PRG",""
- " ARC-Shell 1.96","C:\ARC\ARCSHEL2.PRG",""
- "Spiele ",5
- " Patience","A:\PATIENCE.PRG",""
- " Galerie","A:\GALERIE.PRG",""
- " Dame","A:\RNSSANCE.PRG",""
- " Backgammon ","A:\GAMMON.PRG",""
- " VAX-Games","A:\GFABASRO.PRG",""
-
-
-
- ə5.3 Druckertreiber patchen
-
- Mit einem Diskettenmonitor kann der in der Datei WT_GFA.PRG
- der interne Druckertreiber verändert werden. Dazu muß nur die
- Stelle 'Druckerreset' gefunden werden. Der Steuerzeichen stehen
- dort in den folgenden Bytes als ASCII-Klartext:
-
- Steuerzeichen für Drucker:
-
- Druckerreset:1B40______
- _______8_lpi:1B30______
- _Draft-Modus:1B7800____
- _________USA:1B5200____
- _Papierlänge:1B43xx____
- _Linker_Rand:1B6Cxx____
- Rechter_Rand:1B51xx____
- ____17.2_cpi:0F________
- Oberer__Rand:1B72xx____
- Unterer_Rand:1B4Exx____
-
- Die Werte müssen nur mit den entsprechenden Steuersequenzen
- überschrieben werden (siehe Handbuch des Druckers). Dabei sind
- maximal 5 Byte pro Steuersequenz möglich. Steuersequenzen, die
- variable Parameter enthalten, müssen mit den Zeichen 'xx' einge-
- tragen werden. Der Treiber setzt dann die entsprechenden Parame-
- ter ein. Leerzeichen (hier der Übersicht wegen als Unterstrich
- '_' markiert) definieren das Ende der Sequenz, wenn diese kürzer
- als 5 Steuerzeichen ist:
-
-
-
- ə5.4 Änderungen bei Updates
-
-
- ə5.4.1 Änderungen V1.2 -> V1.42 (Auswahl)
-
- - Erweiterung um eine flexible Programmschale wie Flesh.
-
- - Mehr Outline-Funktionen.
-
-
- ə5.4.2 Änderungen V1.42-> V3.0x (Auswahl)
-
- - Anpassung an GFA-BASIC V3.0: neue Variablentypen Byte und
- Word, neue Sprachelemente (SELECT, ....), neue
- Syntaxmöglichkeiten (Gosub ohne Klammeraffe). Es kann wei-
- terhin auch GFA-BASIC V2.0-Code verarbeitet werden.
-
- - Zeilennummern bis 999999, Tab-Abstand 6 Zeichen
-
- - Speicherangaben für Variablentypen
-
- - Einbindung von MENUX in Programmschale. MENUX wurde nicht
- integriert, damit jeder sein eigenes MENUX programmieren
- kann (deshalb ist der Quellcode beim Compiler V3 dabei).
-
- - Bei Programmschale wird der Rückgabewert des Programmes (im
- Fehlerfall die Fehlernummer) angezeigt.
-
- - Druckertreiber kann verändert (gepatched) werden.
-
- - Neues 'Kalenderprogramm', neuer Wettbewerb.
-
- - Listing auf Drucker: DEF FN und FUNCTION-Zeilen fett.
-
- - Ausgabe des Atari-eigenen "ß"-Zeichens CHR$(158) als grie-
- chisches CHR$(225), damit keine Peseta-Ausgabe mehr auf
- 'Nicht-Atari-Drucker'.
-
- - X-REF: Im Protokoll werden die maximale Anzahl Variablen, die
-
- WT_GFA lesen kann, angezeigt.
-
- - X-REF: Der Speicherbedarf kann über Patches gesteuert
- werden.
-
- - Zeilennumerierung wahlweise ab 0 (GFA V3) oder 1 (Tempus,
- 1st Word Plus)
-
- WT_FT.PRG, WT_TREE.PRG und WT_DOUBL.PRG liegen in neuen Versionen
- vor. WT_TREE.PRG wurde in die HD-TOOLS-Serie mit aufgenommen.
- Zweck: Grafische Anzeige der Verzeichnisstruktur einer Fest-
- platte.
-
-
- ə5.4.3 (Noch) nicht umgesetzte Erweiterungsvorschläge
-
- - Anzeige der Proceduren-Hierarchie grafisch als Baum
- (was tun bei rekursiven Funktionen?)
-
- - Tastatursteuerung (macht wenig Sinn, da das Programme nur
- wenige Interaktionen verlangt).
-
- - Ausgabe der Cross-Reference-Liste gleich nach dem Erstellen
- (kommt vielleicht schon beim nächsten Update).
-
- - Anzeige des REM-Killer, um wieviel Prozent die Datei gekürzt
- wurde (Spielerei).
-
- - Meldungen wie 'Procedure wird aufgerufen, ist aber nicht
- vorhanden'.
-
- - ERASE: Warnung nur, wenn tatsächlich kein ERASE.
-
- - Auflistung aller lokal definierten, aber nicht verwendeten
- Variablen (... wäre eigentlich wichtig).
-
- - Umschaltung auf mittlere Bildschirmauflösung bei Start in
- niedriger (wie geht das?).
-
- - X-REF als Einzelprogramm für 520 kB-ST's (uninteressant).
-
- - Externer Druckertreiber (zuviele Dateien, dafür jetzt Patch-
- Möglichkeit.)
-
- - Globale Variablentypenvereinbarungen , z.B. DEFINT (kommt
- vielleicht schon beim nächsten Update).
-
-
- ə5.4.4 Fehler, die noch nicht behoben sind:
-
- X-REF: X-REF erzeugen: Bei Speicherknappheit (ca 45 kB) wäh-
- rend X-REF erzeugen kann das Programm abstürzen (Fehler
- wurde erst einmal beobachtet).
-
- X-REF: X-REF ausgeben: Real-Zahlen mit Exponent werden als
- zwei Variablen gedeutet (2.9E-9 -> 2.9E und 09.)
-
- X-REF: In GFA-BASIC gelten lokale Variablen nicht nur in der
- Procedure als lokal, in der sie definiert werden,
- sondern auch in allen von dieser Procedure aufgerufenen
- Proceduren. Es mag zwar kein guter Programmierstil
- sein, solche Variablen nicht als Übergabe-Variablen
- weiterzugeben, ist aber in GFA-BASIC erlaubt. In WT_GFA
- wird aber eine lokale Variable nur innerhalb der
- Procedure als lokal angesehen, in der sie definiert
- wird.
-
- Diverse: Listing drucken: Bei Initialisierung CHR$(208) falsch.
-
- Diverse: Listing drucken: kein Zeilenumbruch.
-
- Sonst.: Fehler bei Ausgabe auf schreibgeschützer Diskette.
-
- Weitere Fehler bitte über Anwenderreport REPORT.TXT schrift-
- lich melden. Diese werden bis 01.03.1990 gesammelt, um dann die
- Arbeiten für V3.03 vorzunehmen.
-
-
-
- ə5.5 SCHMANKERL: PROGRAMMIERWETTBEWERB
-
- Im Laufe der Jahre entstand die folgende Kalender-Routine,
- die aus nur einer (1!) Zeile besteht - hier allerdings leserlich
- formatiert. Das Programm enthält nur einen Befehl (PRINT) und
- sonst noch einige (24) Funktionen. Die Aufgabe bestand darin, das
- Ergebnis im Klartext auszugeben und mit der begrenzten Länge
- einer Programmzeile im Interpreter auszukommen. Die Ergebnisse
- stimmen ab dem Jahr 1752.
-
-
- INPUT "Tag,Monat,Jahr):",t%,m%,j%
- PRINT
- MID$ (
- "Samstag Sonntag Montag Dienstag Mittwoch Do
- nnerstagFreitag",
- 1+10*( ( ( 13 * (1 + m% - 12 * (m% < 3)) \ 5 )
- + ( 5 * (j% + (m% < 3)) \ 4 )
- - ( (j% + (m% < 3)) \ 100 )
- + ( (j% + (m% < 3)) \ 400 )
- + t%
- ) MOD 7
- ),
- 10
- )
-
- In der Public-Domain-Version 1.2 war ein kleiner Wettbewerb
- ausgeschrieben. Wer als erster diese Zeile weiter verkürzt,
- sollte die Vollversion kostenlos erhalten. Der Gewinner ist
- Alfred Sieglhofer. Zitat: "Die Lösungsidee beruht darauf, daß
- wegen der 'MODULO 7'-Bildung ohne Schaden anzurichten erst mal
- 7*((j%+(m%<3)\100) addiert werden darf. Dann lassen sich die
- beiden 'Jahrhundertterme' zusammenfassen."
-
- Triviale Vereinfachungen, die lediglich eine Reduzierung der
- Anzahl von Klammern bewirken, konnten nicht berücksichtigt wer-
- den, da bei manchen Interpreterversionen die Klammern notwendig
- sind. Bei der Integerdivision "\" gibt es Unterschiede z.B.
- zwischen GFA V1 und GFA V2, sowie zu anderen BASIC-Dialekten.
-
- Die Lösung von Alfred Sieglhofer ist nun die neue Ausgangs-
- situation für den Kalender-Wettbewerb:
-
- INPUT " Datum (Tag,Monat,Jahr):",t%,m%,j%
- PRINT " Wochentag: ";
- MID$ (
- "Samstag Sonntag Montag Dienstag Mittwoch D
- onnerstagFreitag",
- 1 + 10 * ( ( t%
- + 13 * ( m% + 1 - 12 * (m% < 3)) \ 5
- + 5 * ( j% + (m% < 3) ) \ 4
- + 25 * ( (j% + (m% < 3) ) \ 100 ) \ 4
- ) MOD 7
- ),
- 10
- )
-
- Wer als erster eine noch kürzere Routine in GFA-BASIC
-
- einsendet, erhält als Anerkennung umgehend eine aktuelle Profi-
- version der Weller-TOOLS für GFA-BASIC.
-
-
-
- ə5.6 UNIX-WERKZEUGE FÜR DIE PROGRAMMENTWICKLUNG
-
- Wer unter UNIX in C programmiert, hat ein paar Hilfsmittel
- mehr, als in den Weller-TOOLS für GFA-BASIC implementiert sind.
- Wer Lust hat, kann die im folgenden genannten Hilfsmittel für
- GFA-BASIC nachprogrammieren:
-
-
- ə5.6.1 Programm-Checker 'lint'
-
- Sucht nach:
- - unerreichbaren Befehlen
- - unbenutzten Variablen
- - Variablen, die vor ihrer Initialisierung benutzt werden
- - unbenutzten Funktionen
- - Funktionen, deren Returnwert nicht benutzt wird
- - logischen Ausdrücken mit konstantem Ergebnis (z.B.:
- (a OR NOT a) ist immer TRUE
- - Sprünge hinein in Schleifenrümpfe
- - Typ-Inkompatibilitäten (in GFA-BASIC oft erlaubt, z.B.
- a%=b!)
- - nicht portable Konstrukte (?)
-
-
- ə5.6.2 C-Präprozessor 'pp'
-
- Macht folgendes:
-
- - tauscht symbolische Konstanten gegen Werte aus (s.o.)
- - wertet Konstanten-Ausdrücke aus, z.B. sei zmax konstant 100
- für das ganze Programm. Dann gilt b=zmax-1 -> b=99.
- - entfernt Kommentare (macht der GFA-Compiler)
- - substituiert symbolische Konstanten
- - expandiert Makros (?)
- - zieht include-Dateien in die Quelle
- - steuert die bedingte Compilierung
-
-
-
- ə5.7 GLOBALES PROGRAMM-LAYOUT
-
- Wenn man Programme auch nach Jahren noch verstehen können
- möchte, um z.B. Änderungen durchzuführen, oder wenn andere
- Programmierer sich in den Programmcode einarbeiten müssen, ist es
- unumgänglich, Mindestregeln an Programmierkonversionen einzuhal-
- ten. Eine wichtige Informationsquelle (auch für Mitarbeiter) ist,
- neben AUSFÜHRLICHER Kommentierung, der Programmkopf:
-
- ******************************************************************
- '
- ' Projekt: Weller-TOOLS für GFA-BASIC
- '
- ' Beschreibung: Entwicklungssystem für GFA-BASIC-Programme mit:
- ' - Flexible, programmierbare Programmschale
- ' - Cross-Reference-Analyser,findet vollautomatisch
- ' Fehler und macht Verbesserungsvorschläge
- ' - Outliner zur Analyse der Programmstruktur
- ' - Viele kleine Utilities (Lister, Rem-Killer, .)
- '
- ' Autor: Dipl.-Ing. Clemens Weller
- ' Mitarbeiter: Dipl.-Ing. (FH) Henrik Alt, Gaildorf: Assembler
- ' Dr. Wolfgang Brenner, Schwäbisch Hall: Beta-
- ' Tester, Beratung
- '
- ' Projektbeginn: 07.10.88
- ' Status: Freigegeben 01.01.90 V3.02, 23.12.89 V3.02 100 kB
- '
- ' Änderungen:
- ' -----------
- ' Version Datum Kommentar
- ' V1.07 07.10.88 ! Zusammenlegung der Utilities in ein Prog
- ' V1.08 23.10. ! Debugging
- ' V1.09 05.11.,10.11.,21.11. ! Harmonisierung, Integration des
- ' Handbuches
- ' V1.1 21.11.,22.11.,23.11. ! 1. Freigegebene Version
- ' V1.2 10.12. ! Anpassung Speicher 4MB, Freigabe PD 20kB
- ' V1.21 17.01.89 ! Checksumme eingeführt
- ' V1.31 30.01. ! DIM und ERASE geändert wegen Fehler beim
- ' 2. Laden
- ' ! OL u.a. Funktionen verbessert
- ' V1.32 01.02. ! MC-Routinen in Real-Feld -> schneller
- ' als in String
- ' V1.34 03.02. ! rm_kill schneller und von Fehler befreit
- ' V1.35 04.02. ! Geschwindigkeitsoptimierung von xref
- ' (nicht fertig)
- ' V1.41 06.02. ! Flexible Programmschale integriert
- ' V1.42 09.02. ! Extra-Hilfen integriert,Freigabe Verkauf
- ' V2.00 06.07.89 ! Beginn umfangreicher Verbesserungen (s.
- ' extra Liste)
- ' 11.07. ! 6-stellige Zeilennummern, Sprites weg
- ' V2.01 29.07. ! Menux in Shell integriert
- ' V2.02 04.08. ! GRAF-Funktionen V2->V3
- ' V2.03 23.08. ! Mehr SELECT, Word, Byte, SUCC. Trace für
- ' Entwicklung.
- ' V2.04 24.08. ! xref macht weniger (keine?) Fehler mehr
- ' bei GFA V3.
- ' ! Lokale->Globale Var. wg. Geschwindigkeit
- ' V2.05 28.08. ! EXEC machte Probleme: CLOSEW 4 - 0
- ' entfernt, dann ok.
- ' V2.06 29.08 ! Fileselect für TOS 1.4 erweitert, / -> \
- '
- ' usw.
- ' ****************************************************************
-
-
- ə5.8 ÜBERSICHT ÜBER ZUSATZPROGRAMME FÜR GFA-BASIC
-
- Diese Liste enthält einige Tools für GFA-BASIC. Sie erhebt
- keinen Anspruch auf Richtigkeit und Vollständigkeit. Ergänungs-
- vorschläge und Korrekturen sind willkommen.
-
-
- ə5.8.1 Analysierer
-
-
- BASICREF, STAR-REF
- Autor: Rainer Koch, Kölner Str. 156, 5210 Troisdorf
- Bezug: ST-Computer Nr. 111
- Zweck: Cross-Reference-Analyse; erstellt Variablenliste
- und druckt Listing mit Zeilennummer aus. Ausgabe
- auf Datei oder Drucker (Star NL-10); inkl. Quell-
- code.
- Version: 2.1 vom 23.10.87
-
- CROSSREF
- Autor: H. Bauch, Details: Lothar Veitenhansl, Hölgerstr.
- 12, 6100 Darmstadt, Tel. 06151/23720
- Bezug: Idee: Listing in ST-Computer 5/87 S. 36
-
- TRACEBAS
- Bezug: GFA-CLUB, Diskette Nr. 22
- Autor: Lothar Veitenhansl, Hölgerstr. 12, 6100 Darmstadt,
- Tel. 06151/23720
- Zweck: "Das Programm wurde notwendig, da ich ein 180
- Kilobyte GFA-BASIC-Programm entwickelt habe, in
- dem Fehler von der Variablen-Organisation zwar durch das
- CROSSREF.PRG leicht zu entdecken waren, Fehler im logischen
- Programm Ablauf aber bei ca. 400 Procedures kaum noch zu
- ermitteln waren. Die normale TRACE Funktion (TRON) gibt
- viel zu viele Informationen aus, logische Struktur-Fehler
- sind damit auch nicht zu ermitteln. Es war also naheliegend,
- eine Möglichkeit zu finden, die Verschachtelung der Proce-
- dures ausgeben zu lassen. Zusätzlich zu den nötigen Kon-
- trollaufrufen GOSUB uprg(1=Anfang od. 0=Ende, Unterprogramm-
- name) fügt das Programm zwecks besserer Lesbarkeit des
-
- Listings den Unterprogrammnamen als REM (!) an das RETURN
- an. Dies wird nicht mehr gelöscht! Das TRACEBAS.PRG erzeugt
- folglich eine Drucker- od. Bildschirmliste, die das momen-
- tane Unterprg mit den aufrufenden Prozeduren beim Verlassen
- des Unterprogrammes ausgibt, (Drucker : tracelst!=TRUE,
-
- Screen : tracecon!= TRUE), sowie die Ebene des Uprgs. und
- die Anzahl der Aufrufe. Aus dieser Liste läßt sich fast
- direkt ein Nassi-Shneiderman-Diagramm erzeugen, indem man
- die Blöcke farbig markiert. Vorsicht beim Anwenden des
- TRACEBAS.PRG auf Programme in denen die Variablen tracelst!,
- tracecon! oder das Unterprogramm PROCEDURE uprg() verwendet
- worden sind !!!"
-
- STRUKTO
- Autor: Peter Ubachs, Schlenkestr. 54, 4020 Castrop-Rauxel
- Bezug: für DM 5,-- Vorkasse direkt vom Autor
-
-
- ə5.8.2 Masken- und Menü-Generatoren
-
- KLIK-EDI CLICK BOX CONSTRUCTION SET
- Autor: Dietrich Glasenapp, Linzenicher Weg 38, D-5170
- Jülich 12, Tel. 02461/8704
- Bezug: direkt vom Autor, 'Einführungspreis' DM 19,90
- Zweck: "Programmsystem zur grafischen Gestaltung der
- Bildschirm-Bedieneroberfläche von Steuer-Menüs für
- technisch-schlichte Anwendungen." Editor ist Teil
- des Anwenderprogrammes, dadurch schnelles Entwer-
- fen und Austesten möglich.
- Anm.: Für GFA-BASIC V3; Programm liegt als LST-Datei (32
- kB) vor; gut verständliche Anleitung als TXT-Datei
- (51 kB); selbstgestricktes Verfahren zur Verwal-
- tung von Boxen unter Maussteuerung; keine GEMVDI-
- Funktionen.
-
- BCS - BASIC CONSTRUCTION SET
- Autor: Black Ninija (keine Adresse bekannt)
- Zweck: Menüs und Dialogboxen im Programm editieren, als
- LST-Datei abspeichern und in Anwenderprogramm
- ein'mergen'. Selbstgestricktes Verfahren zur Ver-
- waltung von Boxen unter Maussteuerung; keine
- GEMVDI-Funktionen.
- Anm.: Unterstützt die Programmierung von eigenen Desk-
- tops mit GFA-BASIC. Durch ein eingebautes Malpro-
- gramm können die Menüs (Buttons und Verzierungen)
- auf dem Bildschirm gezeichnet und Icons plaziert
- werden. BCS erzeugt dann ein ablauffähiges GFA-
- BASIC-Programm, das diesen Desktop aufbaut und die
- eingebauten Buttons abfragt. (M)
-
- TEXTER
- MEDITOR
- MSK-GEN
-
- MSK-Edit Masken-Editor für GFA-BASIC
- Bezug: ST-Computer Nr. 111
- Zweck: "Jeder, der in BASIC ein Programm erstellt und
- Eingabemasken braucht, hat Arger mit Print At()
- usw. Dieses Programm erstellt Eingabemasken und
- übergibt diese als File.MSK zur Weiterverarbei-
- tung. Übergeben werden: Maskengröße, Hintergrund-
- farbe, Titel, Inputtexte, Inputsprünge, Input-
- länge. Inkl. Quellcode; Generiert mit einfacher
- Bedienung eine komplette Eingabemaske als Quell-
- text (Form Input). Incl. Source in GFA-BASIC. (M),
- 69 029 Bytes
-
- MENÜEDIT
- Quelle: ST-Computer Nr. 149
- Zweck: Eine Art RCS für GFA-BASIC-Menüleisten. Gestalten
- Sie Ihre Menüleiste per Dialog. Das Programm
- erzeugt sodann einen kompletten Programmkopf für
- GFA-BASIC, der in das eigene Programm eingebunden
- wird und die gesamte Menüführung Ihres Programms
- erledigt. (M)
- Anm.: Wirklich lohnenswert während der Entwurfsphase!
-
-
- ə5.8.3 Shells
-
- FLESH Flexible Shell
- Autor: Peter Sippel
- Bezug: St-Computer Nr. 144 , Source beim Autor erhältlich
- Zweck: Programmschale, von der aus bis etwa 100 verschie-
- dene Programme aufgerufen werden können. Sehr
- einfache Bedienung. Das Programm verbraucht leider
- etwas viel Speicherplatz (etwa 100 kB). Inzwischen
- gibt es auch eine kommerzielle Version (DM 79,--).
-
- GFA-SHELL
- Bezug: ST-Computer Nr. 129
- Zweck: Programmschale; Kommandointerpreter (CLI) und
- Sprite-Editor integriert.
-
- SUPERSHELL
- Bezug: ST-Computer 118
- Zweck: Universelle Programmschale. Aufruf beliebiger Pro-
- gramme aus der Menüleiste. Quellcode in GFA-BASIC
- auf Diskette. Dadurch kann sie auf persönliche
- Wünsche abgestimmt werden. (F/M);
-
- G_CSHELL
- Bezug: ST-Computer Nr. 175
- Zweck: Programmschale für GFA-BASIC. Mit diesem Programm
- können Interpreter und Compiler bequem aufgerufen
- werden. (M)
-
-
- ə5.8.4 Konverter
-
- OSKAR Omikron schnell Konverter für Atari ST-Rechner
- Autor: Markus Zietlow, Wilhelm-Kraft-Str. 14, 4322
- Sprockhövel 2
- Bezug: Listing in Happy Computer Sonderheft 23; Leserdis-
- kette 25925 für DM 39,90 (viel zu teuer).
- Zweck: Wandelt Übersetzt GFA-BASIC-Quellcodes (*.LST)
- Omikron-BASIC. Danach ist aber noch Handarbeit
- nötig.
-
- ST-Kill
- Bezug: Auf original GFA-BASIC-Diskette V2.02
- Zweck: Wandelt ST-BASIC, Omikron-BASIC, GW-BASIC u.a. in
- GFA-BASIc um. 9399 Byte.
-
- KONVERTER: ST-BASIC in GfA-BASIC, 41 719 Bytes
-
- CONVERT
- Autor: Klaus Mulder, Obere Hauptstr. 4, 8051 Massenhau-
- sen, Tel. 08165/8437
-
- BASIC converter
-
-
- ə5.8.5 Diverses
-
- SPRITE EDITOR
- Zweck: Sprite Editor, nur (s/w), 12 866 Bytes
-
- ICONEDIT
- Bezug: ST-Computer Nr. 67
- Zweck: Erstellen Sie Sprite-, Maus- und Füllmuster und
- verwenden Sie sie in GfA-BASIC), (s/w), 31875
- Bytes.
-
- SECO
- Autor: Eckart Stinshoff, Adresse unbekannt
- Bezug: ST-Computer Nr. 111
- Zweck: Verwaltet Bildausschnitte (mit GFA-BASIC Befehlen
- PUT und GET bearbeitbar) und fügt sie zu Biblio-
- theken zusammen. Incl. Source in GFA-BASIC. (F/M),
- 63 874 Bytes.
-
-
-
- ə5.9 DIES UND DAS
-
-
- ə5.9.1 Dank an:
-
- Meine Frau Ingrid für die aktive Mitarbeit und die große Geduld.
-
- Henrik Alt für die Assemble-Routinen, Wolfgang Brenner für
- die Durchführung von Tests und Korrekturlesen der Handbücher, Uwe
- Röger für das Brennen der TOS 1.4-Eproms.
-
- Besonderen Dank geht an folgende Anwender, die mit ihren
- ausführlichen Anwender-Reports wesentlich zur Weiterentwicklung
- beigetragen haben:
-
- Daniel Egner, Thomas Fehr, Dr. Flesch, Thorsten Flöck, P.
- Früh, Thomas Gärtner, Thorsten Hansen, Roland Heinemann,
- Eric Hofmann, Axel Jühne, Karsten Köper, Thomas Kränz, Dr.
- Norber Mayer, Thomas Muckert, Andreas Pirner, Marc Saul,
- Hayo Schmidt, Stephan Schoroth, Friedemann Voigts, Heinrich
- Wolf.
-
- Auch den anderen ca. 100 Anwendern, die den Anwender-Report
- ausgefüllt haben, sei an dieser Stelle für die aktive Mitarbeit
- gedankt.
-
- Aus rein praktischen Gründen war es unmöglich, alle Briefe
- schriftlich zu beantworten. In Problemfällen hat oft ein kurzes
- Telefongespräch zur Klärung beigetragen. Da sich die Adresse von
- 'Weller-TOOLS' ab Februar 1990 ändert, bitte nicht die alte
- Telefonnummer anwählen. Post an die alte Adresse wird über einen
- längeren Zeitraum weitergeleitet.
-
-
- ə5.9.2 Ideen aus anderen Programmen:
-
- H. Bauchs Listing eines Cross-Reference-Analysers in der ST-
- Computer vom Mai 1987, Peter Sippels flexible Schale 'Flesh' von
- der ST-Computer Public-Domain-Diskette Nr. 114 und Lothar Vei-
- thenhansls Tracebas von der GFA-Club-Diskette Nr. 22. Ideen zum
- Programmierstil und zur Arbeitsweise von den Programmierern im
- Buch 'Faszination Programmieren'.
-
-
- ə5.9.3 Programmhinweise:
-
- Die Programme wurden mit dem GFA-BASIC Interpreter V3.07D
-
- entwickelt und dem Compiler V3.03 compiliert. Das Handbuch wurde
- mit 1st Word Plus V3.15 geschrieben, das Inhaltsverzeichnis mit
- 1st XTRA V1.02 erstellt. Die Bilder wurden mit Public Painter
- Monochrom V0.47 erstellt oder bearbeitet. Tempus V2.05 hat gute
- Dienste geleistet. Schließlich noch für die Fanpost: Adimens V2.3
- und Aditalk V2.3 verwalten die Adressen.
-
-
- ə5.9.4 Copyright, Public Domain:
-
- Die Software, das Handbuch, der Name 'Weller-TOOLS für GFA-
- BASIC' sowie das 'Weller-TOOLS'-Signet unterliegen dem Copyright
- von Clemens Weller, Steinheim a.d. Murr. Disketten der Public-
- Domain-Version dürfen frei kopiert werden, ohne daß diese Copy-
- rights verletzt werden, solange die Zusammenstellung der Disket-
- ten nicht verändert wird.
-
-
- ə5.10 Anwender-Report "Weller-TOOLS für GFA-BASIC" V3.02
-
- Dieses Formular kann helfen, die Weller-TOOLS für GFA-BASIC zu
- verbessern. Dieses Formular, ggf. mehrmals, ausdrucken, ausfül-
- len und einsenden an:
-
- Da sich die Adresse von 'Weller-TOOLS' ab Februar 1990
- ändert, bitte nicht die alte Telefonnummer anwählen. Post an die
- alte Adresse wird über einen längeren Zeitraum weitergeleitet.
-
- Weller-TOOLS
- Dipl.-Ing. Clemens Weller
- Adalbert-Stifter-Straße 27
-
- 7141 Steinheim a.d. Murr
-
-
- Name .....................................................
-
- Straße, Nr. .....................................................
-
- Plz, Ort .....................................................
-
- Telefon .......................
-
- Version 3.02 PD...... erhalten am (circa) ................
-
- Quelle: O selbst kopiert
- O Pd-Versand: .......................................
-
- Hardware
-
- Computer Atari ......... Festplatte .. MB Monitor O sw O Col
-
- Drucker: ........................................................
- Probleme beim Listing drucken:
- O Nein O Ja: ..................................................
-
- GFA-Programme (Circa-Angaben)
-
- Größe der LST-Dateien max ca ...... kB
- Anzahl Proceduren max. ca. ......
- Anzahl lokale Variablen pro Procedure max. ca. ......
- Welcher Variablentyp kommt am häufigsten vor: ...........
- wie oft ca. ......
-
- Urteil:
-
- Besonders nützlich ist:
- O X-REF O Outliner O Shell O Lister O Sonstiges: ...........
-
- Besonders verbesserungsbedürftig ist:
- O X-REF O Outliner O Shell O Lister O Sonstiges: ...........
- O Geschwindigkeit O Bildschirmdarstellung O Bedienung
-
- Meine Programmierkenntnisse (Markierung, freiwillig):
-
- Anfänger <--0--1--2--3--4--5--6--7--8--9--10--> Experte
-
-
- Vorschläge, Kritik, Anregungen, Fehler, Wünsche:
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
-